[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