python запись в файл показывает ошибку для UnicodeEncodeError - PullRequest
0 голосов
/ 07 февраля 2020

Мне нужно сделать cp932 (он расширен shift-jis)

UnicodeEncodeError: 'cp932' codec can't encode character '\u270c' in position 0: illegal multibyte sequence

    import codecs
    mytext = '\u270c'
    with codecs.open(path,mode='w',encoding='cp932') as f:
        mytext.encode('cp932',"ignore")
        f.write(mytext)
    exit()

Я просто упростил mytext для этой статьи.

Я думаю, что этот символ проходит кодирование с игнорированием flg.

Однако, write показывает ошибку.

Есть ли способ решить эту проблему ??

Ответы [ 2 ]

0 голосов
/ 09 февраля 2020

В вашем примере файл f будет ожидать, что строки Unicode будут переданы в f.write(), и они будут закодированы как объявлено codecs.open, поэтому код пытается выполнить двойное кодирование. Кроме того, '\u270c' не является символом, поддерживаемым CP932, поэтому он ни в коем случае не может быть записан в файл CP932.

Предполагая Python 3, для записи строки Unicode text в конкретное кодирование, используйте:

with open('output.txt','w',encoding='cp932') as f:
    f.write(text)

codecs - более старый модуль и не требуется. В Python 2 io.open является портированным эквивалентом Python 3 open и также поддерживается Python 3 для переносимости.

0 голосов
/ 07 февраля 2020

\ является функциональным символом в cp932. Итак, если вы хотите кодировать \, вам следует использовать \\
в вашем случае:

import codecs
mytext = '\\u270c'
with codecs.open(path,mode='w',encoding='cp932') as f:
    mytext.encode('cp932',"ignore")
    f.write(mytext)
exit()
...