Предположим, что я читаю, файл, содержащий 3 запятые, разделил числа. Файл был сохранен с с неизвестным кодированием, до сих пор я имею дело с ANSI и UTF-8. Если файл был в UTF-8, и он имел 1 строку со значениями 115,113,12 затем:
with open(file) as f:
a,b,c=map(int,f.readline().split(','))
бросил бы это:
invalid literal for int() with base 10: '\xef\xbb\xbf115'
Первое число всегда искажается с этими '\xef\xbb\xbf' символы. Для остальных 2 числа хорошо работает преобразование. Если я вручную заменю '\xef\xbb\xbf' '' и затем сделаю международное преобразование, то это будет работать.
Существует ли лучший способ сделать это для какого-либо типа закодированного файла?
import codecs
with codecs.open(file, "r", "utf-8-sig") as f:
a, b, c= map(int, f.readline().split(","))
Это работает в Python 2.6.4. Вызов codecs.open
открывает файл и возвращает данные в формате Unicode, декодируя из UTF-8 и игнорируя начальную спецификацию.
Вы видите BOM в кодировке UTF-8 или «Метку порядка байтов». Спецификация обычно не используется для файлов UTF-8, поэтому лучший способ справиться с ней - открыть файл с помощью кодека UTF-8 и пропустить символ U + FEFF
, если он присутствует.