Подтвердить что ты не робот

Работа с номерами 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' на '', а затем выполним преобразование int, это сработает.

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

4b9b3361

Ответ 1

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 и игнорирование исходной спецификации.