这里有一个小tmp.带有非ASCII字符的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 docs says:

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

My way of checking the encoding is to use Firefox (maybe someone would suggest something more obvious). I open tmp.py in Firefox and if I select View->Character Encoding->Unicode (UTF-8) it looks ok, that is the way it looks above in this question (wth ß symbol).

如果我说:

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

作为tmp中的第一个字符串.py它不会改变任何错误持续存在的情况.

有人能帮我找出我做错了什么吗?

推荐答案

您的terminal is using编码不支持该字符:

>>> '\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处理得很好,是您的输出编码无法处理它.

您可以try 在Windows控制台中使用chcp 65001切换代码页;chcp是用于更改代码页的windows命令行命令.

我的,在OS X上(使用UTF-8)可以处理得很好:

>>> print('\xdf')
ß

Python-3.x相关问答推荐

Pandas 中每行的最大值范围

按一列分组,如果日期列相同,则在数字列中填写缺少的值

将列表项的极列水平分解为新列

我不能使用拆分来分隔数据

如何将python点击参数设置为与选项回调不同的参数的别名?

新行是pandas数据帧中旧行的组合

汉明距离:涉及按位运算的逻辑步骤不清楚

通过点和线计算CV2 Homography

集合操作:应该只适用于集合,但适用于 dict_keys?

Pandas 值列中列表中元素的计数

python用户输入5个偶数并打印最大的

`pyspark mllib` 与 `pyspark ml` 包

ValueError:找不到子字符串,我做错了什么?

python total_ordering:为什么使用 __lt__ 和 __eq__ 而不是 __le__?

在 Pandas 数据框中显示对图

aiohttp+sqlalchemy:在回滚无效事务之前无法重新连接

如何在不使用 @hydra.main() 的情况下获取 Hydra 配置

用于 Django 应用程序的 Cython:它会工作吗?

如何在 Selenium 和 Python 中使用类型查找元素

在 Ubuntu 上为 Python3 安装 mod_wsgi