【问题标题】:Why does "Save as UTF-8" in Eclipse fix the Python UnicodeEncodeError?为什么 Eclipse 中的“另存为 UTF-8”会修复 Python UnicodeEncodeError?
【发布时间】: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 &gt; General &gt; 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


【解决方案1】:

Phyton 将要打印的文本转换为控制台的编码,即 Windows 上的活动代码页 (at least until version 3.6)。

要避免UnicodeEncodeError,您必须将控制台编码更改为UTF-8。有several ways 可以做到这一点,例如。 G。在 Windows 命令行上执行 cmd /K chcp 65001

在Eclipse中,控制台的encoding可以在运行配置中设置为UTF-8Run > Run Configurations... ),在常用标签中。

Window > Preferences: General > WorkspaceProject > Properties: Ressource 中的文本文件编码设置仅用于文本编辑器如何显示文本文件。

【讨论】:

  • 非常感谢您的解释。
  • 来自UTF-8 in Windows 7 CMD:“除了从 cmd 控制台执行 chcp 65001 之外,您还需要使用 Lucida 控制台字体。”
猜你喜欢
  • 2018-10-02
  • 2015-11-08
  • 2022-10-18
  • 2021-04-27
  • 2013-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-03
相关资源
最近更新 更多