аватар question@mail.ru · 01.01.1970 03:00

Python: 'charmap' codec can't decode byte 0x98

Добрый день Считываю utf8-файл и вывожу в консоль. При попытке вывести букву ""И"" возникает ошибка:

File ""I:\ProgramFile\Anaconda\lib\encodings\cp1251.py"", line 15, in decode      retu codecs.charmap_decode(input,errors,decoding_table)  UnicodeDecodeError: 'charmap' codec can't decode byte 0x98 in position 1: character maps to < undefined >

Воспроизводится на вот таком примере:

test_text_1 = ""Задача\n""test_text_2 = ""Итератор""file = open('temp.txt', 'w', encoding='utf-8')file.write(test_text_1)file.write(test_text_2)file.close()text = open('temp.txt', 'rb')for byte_code in text:    print(byte_code.strip())    test_text = byte_code.decode('cp1251')    print(test_text.strip())

Первое слово выводится нормально, а на втором - ошибка. Никак не могу найти способ побороть проблему.

UPD: Видимо я описал проблему слишком широко, исправляюсь:

Как конвертировать ""И"" из utf-8 в cp1251? Для ""А"" всё работает, а для ""И"" - нет.

Код:

byte1 = 'А'.encode('utf-8')byte2 = 'И'.encode('utf-8')print(byte1, byte2)test1 = byte1.decode('cp1251')print(test1)test2 = byte2.decode('cp1251')print(test2)
аватар answer@mail.ru · 01.01.1970 03:00

Чтобы напечатать файл, содержащий текст в utf-8 кодировке, в консоль (аналог type filename в cmd.exe) в Питоне:

#!/usr/bin/env python3import shutilimport syswith open(filename, encoding='utf-8') as file:    shutil.copyfileobj(file, sys.stdout)

Если хочется напечатать Юникодные символы, которые непредставимы в chcp кодировке (OEM code page), то см.

Последние

Похожие