Контакт с числами UTF-8 в Python

Предположим, что я читаю, файл, содержащий 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' '' и затем сделаю международное преобразование, то это будет работать.

Существует ли лучший способ сделать это для какого-либо типа закодированного файла?

11
задан Ηλίας 28 January 2011 в 14:41
поделиться

2 ответа

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 и игнорируя начальную спецификацию.

17
ответ дан 3 December 2019 в 02:52
поделиться

Вы видите BOM в кодировке UTF-8 или «Метку порядка байтов». Спецификация обычно не используется для файлов UTF-8, поэтому лучший способ справиться с ней - открыть файл с помощью кодека UTF-8 и пропустить символ U + FEFF , если он присутствует.

13
ответ дан 3 December 2019 в 02:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: