[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