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

Petr Prikryl PrikrylP na skil.cz
Pátek Březen 16 11:41:01 CET 2007


Tak nakonec jsem to s dopomocí a se studiem PEP
vyřešil principiálně takto:

===================================================
import codecs
f = codecs.open('soubor.txt', 'rU', 'utf-8-sig')
for line in f:
    print repr(line)
f.close()
===================================================

Funguje to i pro soubory bez BOM a na konci řádků
z windowsového textového souboru to nenechává \r.

pepr


> -----Original Message-----
Petr Prikryl
> 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()
> > --------------------------------------------------
> _______________________________________________
> Python mailing list
> Python na py.cz
> http://www.py.cz/mailman/listinfo/python


Další informace o konferenci Python