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

RMiklos na pss.sk RMiklos na pss.sk
Čtvrtek Březen 15 11:52:37 CET 2007


>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ů.)
Neviem jak je to s unifikaciou koncov riadkov vo Windowse asi je tam ako 
pozostatok z DOSu '\r\n'. 
Aby som nemusel riesit ci je na konci riadku '\r\n' alebo '\r' , robim 
vzdy chomp (t.j. line = line.rstrip() ) 
co v tom skripte samozrejme robis aj ty.




"Petr Prikryl" <PrikrylP na skil.cz> 
Sent by: python-bounces na py.cz
15.03.2007 11:10
Please respond to
Konference PyCZ <python na py.cz>


To
"Konference PyCZ" <python na py.cz>
cc

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






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


Mgr. Ing. Roman MIKLÓŠ 
Prvá stavebná sporiteľňa a.s. 
Bajkalská 30, P. O. Box 48 
829 48  Bratislava 25 
Tel.: +421/ 2 / 582 31 174 
Fax: +421/ 2 / 582 31 109 
------------- další část ---------------
HTML příloha byla odstraněna...
URL: http://www.py.cz/pipermail/python/attachments/20070315/f3f95f42/attachment.htm 


Další informace o konferenci Python