#python #кодировка #python_2x #unicode
Пытаюсь читать файл портов от IANA. Он сохранен в кодировке UTF-8 w/o BOM. Но на одной из строк функция readline() ругается вот таким вот образом 'charmap' codec can't decode byte 0x98 in position 7938: character maps to <"undefined"> Строка в файле выглядит следующим образом: # Jim Harlan <"jimh&infowest.com"> Какой костыль придумать для этого? Или есть прямой путь решения? UPD Ибо костыль в виде удаления данной строки пойдет (причем она, почему-то вот такая одна), но только на время отладки, ибо потом вдруг что, партнеры будут рвать волосы на моей голове. Так же выложу код, которым пользуюсь для данной операции: try: file = open(path, 'r') while True: line = file.readline() if(not line): break print(line) finally: file.close()
Ответы
Ответ 1
попробуйте использовать встроенную библиотеку codecs: import codecs fileObj = codecs.open( "someFilePath", "r", "utf_8_sig" ) text = fileObj.read() # или читайте по строке fileObj.close()Ответ 2
Чтобы прочитать текстовый файл, закодированный с использованием utf-8 кодировки в Питоне, можно использовать io.open() функцию, которая доступна как встроенная open() в Питоне 3: #!/usr/bin/env python import io with io.open(path, encoding='utf-8') as file: for line in file: process(line) Если в файле возможны ошибки, связанные с кодировкой: сама кодировка верна, но могут быть мелкие погрешности, тогда можно передать errors='ignore' обработчик ошибок (или другое значение в зависимости от конкретной ситуации). Не используйте codecs, который может некорректно работать с режимом универсальных строк. Не нужно менять вашу кодовую страницу на cp65001, чтобы utf-8 файл прочитать. Если хотите напечатать Unicode в Виндовую консоль, то см. Как из Python вывести на Windows-консоль строку в Юникоде?Ответ 3
file = codecs.open(path, encoding='utf-8', mode='r')Ответ 4
Постоянно ловил эту ошибку, раз за разом. Решение увидел здесь. import codecs file = codecs.open( "yourFile", "r", "utf-8" ) data = file.read() file .close() chcp 65001 в командной строке Этими не сложными действиями проблема решена.
Комментариев нет:
Отправить комментарий