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()
--------------------------------------------------

Vysledok skriptu:
BOM = u'\ufeff'
u'\r\n'


u'Prvn\xed \u0159\xe1dek.\r\n'
rvní řádek.

u'Druh\xfd \u0159\xe1dek.\r\n'
ruhý řádek.

u'T\u0159et\xed \u0159\xe1dek.\r\n'
řetí řádek.

u'P\u0159\xed\u0161ern\u011b \u017elu\u0165ou\u010dk\xfd k\u016f\u0148 
\xfap\u01
1bl \u010f\xe1belsk\xe9 \xf3dy.\r\n'
říšerně žluťoučký kůň úpěl ďábelské ódy.


Pozn.: Tvoj subor som vytvoril takto:
--------------------------------------------------
# -*- coding: cp1250 -*-
import codecs
out = file( "soubor.txt", "w" )
out.write( codecs.BOM_UTF8 )
unicodeString=\
u'''
První řádek.
Druhý řádek.
Třetí řádek.
Příšerně žluťoučký kůň úpěl ďábelské ódy.
'''
out.write( unicodeString.encode( "utf-8" ) )
out.close()
--------------------------------------------------




"Petr Prikryl" <[EMAIL PROTECTED]> 
Sent by: [EMAIL PROTECTED]
15.03.2007 07:52
Please respond to
Konference PyCZ <[email protected]>


To
"Konference PyCZ" <[email protected]>
cc

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






Ahoj všeci,

Tak nějak prakticky poprvé se dostávám k tomu, 
jak přečíst unicode řetězce ze souboru, který
je uložen ve formátu UTF-8 se signaturou
na začátku (BOM). Nějak se mi nedaří.

Mám takovýto soubor.txt v UTF-8 s BOM
=====================================
První řádek.
Druhý řádek.
Třetí řádek.
Příšerně žluťoučký kůň úpěl ďábelské ódy.
=====================================

... a pustím skript
=====================================
import codecs
f = codecs.open('soubor.txt', 'r', 'utf-8')
for line in f:
    print repr(line)
    print line[1:]
f.close()
=====================================

Výsledek vypadá takto
=====================================
C:\tmp>python a.py
u'\ufeffPrvn\xed \u0159\xe1dek.\r\n'
První řádek.

u'Druh\xfd \u0159\xe1dek.\r\n'
ruhý řádek.

u'T\u0159et\xed \u0159\xe1dek.\r\n'
řetí řádek.

u'P\u0159\xed\u0161ern\u011b \u017elu\u0165ou\u010dk\xfd k\u016f\u0148 
\xfap\u011bl \u010f\xe1belsk\xe9 \xf3dy.\r\n'
říšerně žluťoučký kůň úpěl ďábelské ódy.
=====================================

Všimněte si, že na prvním řádku je \ufeff, což je Byte Order Mark, 
který se tam vůbec nemá objevit. Jeví se mi to jako chyba. 
Na všech řádcích záměrně nevypisuji printem první znak, 
protože u toho prvního řádku to krachne (což je pochopitelné).
Řešil někdo něco podobného? Musí se BOM ukousávat ve vlastní režii?

Díky, 
  pepr
_______________________________________________
Python mailing list
[email protected]
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 
_______________________________________________
Python mailing list
[email protected]
http://www.py.cz/mailman/listinfo/python

Odpovedet emailem