【发布时间】:2012-12-26 09:29:40
【问题描述】:
这是一个带有非 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 文档says:
默认情况下,Python 源文件被视为以 UTF-8 编码...
我检查编码的方法是使用 Firefox(也许有人会提出更明显的建议)。我在 Firefox 中打开 tmp.py ,如果我选择 View->Character Encoding->Unicode (UTF-8) 它看起来不错,这就是它在这个问题上面的样子(带有 ß 符号)。
如果我说:
# -*- encoding: utf-8 -*-
作为 tmp.py 中的第一个字符串,它不会改变任何内容——错误仍然存在。
谁能帮我弄清楚我做错了什么?
【问题讨论】:
-
@Blender:
u在 Python 3 中没有任何作用(在 Python 3 的早期版本中是一个错误,直到它被添加回来以实现向后兼容性) -
您在编辑器中设置编码的可能性更大。
-
还说编码错误..不是解码错误。由于 cp866 是 ms-dos 代码页,我认为您正在尝试将其打印到控制台,这需要编码。
-
@Wooble 你能向我解释一下如何确定吗?如果我使用 Firefox 技巧并选择 ISO 8859-1,我会看到
s = 'ß'而不是 s = 'ß'。 -
@mezhaka:我错了,Martijn 的解释是正确的。
标签: python python-3.x unicode encoding utf-8