[python] Q: Cteni unicode retezcu ze souboru UTF-8 s BOM?

Petr Prikryl PrikrylP na skil.cz
Čtvrtek Březen 15 11:10:05 CET 2007


Díky. Tušil jsem nějakou zradu. Nakonec jsem to principiálně 
napsal takto.

===================================================
import codecs
bom = unicode(codecs.BOM_UTF8, 'utf8')
f = codecs.open('soubor.txt', 'r', 'utf-8')
for line in f:
    line = line.rstrip() + u'\n'
    if line.startswith(bom):
        line = line.lstrip(bom)
    print line,
f.close()
===================================================

To znamená, že z trojbajtové sekvence codecs.BOM_UTF8,
která má hodnotu '\xef\xbb\xbf' vyrobím neexistující
unicode znak u'\ufeff', který zahazuju, protože 
neexistuje :-)

Není další chyba v tom, že při čtení v textovém režimu
dostávám na konci řádku '\r\n'? (... pod Windows, neprovádí
se unifikace konců řádků.) 


RMiklos napsal... na pss.sk
> Je to zjavne bug - tu sa o tom docitas: http://evanjones.ca/python-utf8.html 
> 
> Takze BOM treba odrezat rucne: 
> -------------------------------------------------- 
> # -*- coding: cp1250 -*- 
> import codecs 
> bom = unicode( codecs.BOM_UTF8, "utf8" ) 
> print "BOM = %s" %  repr(bom) 
> f = codecs.open('soubor.txt', 'r', 'utf-8') 
> for line in f: 
>    #print "line[0]= %s" % repr(line[0])
>    if line[0] == unicode( codecs.BOM_UTF8, "utf8" ): 
>       l=line.lstrip(unicode( codecs.BOM_UTF8, "utf8" )) 
>    else: 
>       l = line 
>    print repr(l) 
>    print l[1:] 
> f.close() 
> -------------------------------------------------- 


Další informace o konferenci Python