【发布时间】:2018-04-10 19:31:04
【问题描述】:
我有:
- 文件
file.txt仅包含一个字符:♠,并采用 UTF-8 编码。 -
一个 CP-1252 编码的 Python 脚本
test.py包含:import codecs text = codecs.open('file.txt', 'r', 'UTF-8').read() print('text: {0}'.format(text))
当我在 Windows 7 SP1 x64 Ultimate 和 Python 3.5.2 x64 上的 Eclipse 4.7.2 中运行它时,我收到错误消息:
Traceback (most recent call last):
File "C:\eclipse-4-7-2-workspace\SEtest\test.py", line 3, in <module>
print('text: {0}'.format(text))
File "C:\programming\python\Python35-32\lib\encodings\cp1252.py", line 19, in encode
return codecs.charmap_encode(input,self.errors,encoding_table)[0]
UnicodeEncodeError: 'charmap' codec can't encode character '\u2660' in position 6: character maps to <undefined>
我的理解是,问题源于在 Microsoft Windows 上,Python 解释器默认使用 CP-1252 作为其编码,因此使用字符 ♠。
另外,我要注意的是,我保留了 Eclipse 默认编码,可以在 Preferences > General > Workspace 中看到:
当我将 Python 脚本 test.py 更改为:
import codecs
print(u'♠') # <--- adding this line is the only modification
text = codecs.open('file.txt', 'r', 'UTF-8').read()
print('text: {0}'.format(text))
然后尝试运行它,我收到错误消息:
(注意:Eclipse 被配置为在我运行时保存脚本)。
选择Save as UTF-8选项后,我得到同样的错误信息:
Traceback (most recent call last):
File "C:\Users\Francky\eclipse-4-7-2-workspace\SEtest\test.py", line 2, in <module>
print(u'\u2660')
File "C:\programming\python\Python35-32\lib\encodings\cp1252.py", line 19, in encode
return codecs.charmap_encode(input,self.errors,encoding_table)[0]
UnicodeEncodeError: 'charmap' codec can't encode character '\u2660' in position 0: character maps to <undefined>
我认为这是意料之中的,因为 Python 解释器仍然使用CP-1252。
但是如果我在 Eclipse 中再次运行脚本而不做任何修改,它就可以工作。输出是:
♠
text: ♠
为什么有效?
【问题讨论】:
-
你从哪里得到输出?你在 Eclipse 的控制台视图和命令行中得到相同的输出吗?
-
@howlger 所有输出都是在 Eclipse 的控制台视图中获得的。
-
如果您在命令行上尝试以下操作会发生什么? stackoverflow.com/a/18439832/6505250
-
如果通过
start cmd /K chcp 65001打开一个新窗口没有帮助,也许你也有set the source file's encoding via# -*- coding: utf-8 -*-(see this answer)。否则,我不知道还能做什么。要回答您的问题,为什么它在 Eclipse 中工作:控制台视图的编码是在标签 Common 的运行配置中设置的,我猜在您的情况下它设置为UTF-8。跨度> -
您会在运行配置中找到 Common 选项卡:Run > Run Configurations... pydev.org/manual_101_run.html
标签: python eclipse character-encoding