По какой-то причине у Python возникают проблемы с BOM при чтении строк юникода из файла UTF-8. Рассмотрим следующее:
with open('test.py') as f:
for line in f:
print unicode(line, 'utf-8')
Кажется прямым, не так ли?
Это то, что я думал, пока не запустил его из командной строки и не получил:
UnicodeEncodeError: кодек 'charmap' не может кодировать символ u '\ ufeff' в позиции 0: символьные карты на
<undefined>
Краткий обзор Google показал, что спецификация должна быть очищена вручную:
import codecs
with open('test.py') as f:
for line in f:
print unicode(line.replace(codecs.BOM_UTF8, ''), 'utf-8')
Это работает отлично. Однако я изо всех сил стараюсь увидеть в этом заслугу.
Существует ли обоснование вышеописанного поведения?. Напротив, UTF-16 работает без проблем.