P
Petr Prikryl
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
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