使用西里尔字母时出现UnicodeDecodeError

2 投票
2 回答
1080 浏览
提问于 2025-04-16 18:14

我有一个模块,里面只包含(这只是个例子,实际问题出在一个更大的模块里):

# -*- coding: utf-8 -*-
"януари"

在执行的时候,我得到了:

File "C:\Program Files\JetBrains\PyCharm 107.130\helpers\pydev\pydevd.py", line 1184, in <module>
    debugger.run(setup['file'], None, None)
  File "C:\Program Files\JetBrains\PyCharm 107.130\helpers\pydev\pydevd.py", line 947, in run
    line = stream.readline() #Should not raise an exception even if there are no more contents
  File "C:\Python32\lib\encodings\cp1250.py", line 23, in decode
    return codecs.charmap_decode(input,self.errors,decoding_table)[0]
UnicodeDecodeError: 'charmap' codec can't decode byte 0x83 in position 31: character maps to <undefined>

我使用的是波兰版的Windows XP和Python 3.2。我需要改什么才能正确执行这个模块呢?

2 个回答

0

在PyCharm中,你可以在设置里指定使用UTF-8编码。你可以按下 CTRL + ALT + S 打开设置,然后找到文件编码的选项。这样就可以了。

5

这个模块不是问题所在,问题似乎出在PyCharm上。它好像在读取你的文件时,错误地认为文件是cp1250编码的,即使你已经指定它是utf-8编码。所以这算是PyCharm的一个bug。

它应该以二进制方式打开文件,先读取第一行看看有没有编码信息,如果没有的话,就应该默认认为是UTF-8编码。(虽然在Python 2中,它其实应该默认认为是ASCII编码,但UTF-8也足够用了)。

撰写回答