[为什么不Python承认我的UTF-8编码的源文件?(Why doesn't Python

2019-07-18 03:41发布

这里是一个非ASCII字符有点tmp.py:

if __name__ == "__main__":
    s = 'ß'
    print(s)

运行它,我得到以下错误:

Traceback (most recent call last):
  File ".\tmp.py", line 3, in <module>
    print(s)
  File "C:\Python32\lib\encodings\cp866.py", line 19, in encode
    return codecs.charmap_encode(input,self.errors,encoding_map)[0]
UnicodeEncodeError: 'charmap' codec can't encode character '\xdf' in position 0: character maps to <undefined>

Python文档说 :

默认情况下,Python源文件被视为UTF-8编码的...

我检查编码的方法是使用火狐(也许有人会提出一些更明显)。 我在Firefox打开tmp.py,如果我选择查看 - >字符Encoding->的Unicode(UTF-8),它看起来OK,就是它上面看起来这个问题(问心无愧SS符号)的方式。

如果我把:

# -*- encoding: utf-8 -*-

在tmp.py它不会改变第一串什么,错误仍然存​​在。

可能有人帮我找出我究竟做错了什么?

Answer 1:

编码您的终端正在使用不支持该字符:

>>> '\xdf'.encode('cp866')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/opt/local/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/encodings/cp866.py", line 12, in encode
    return codecs.charmap_encode(input,errors,encoding_map)
UnicodeEncodeError: 'charmap' codec can't encode character '\xdf' in position 0: character maps to <undefined>

Python是处理它就好了,这是你的输出编码不能处理它。

您可以尝试使用chcp 65001在Windows控制台切换你的代码页; chcp是Windows命令行命令来更改代码页。

矿上的OS X(使用UTF-8)可以处理它只是罚款:

>>> print('\xdf')
ß


文章来源: Why doesn't Python recognize my utf-8 encoded source file?