我写了一个非常基本的python3.5脚本,该脚本在带有打印功能的控制台中显示一条消息。
此脚本在我的个人计算机上效果很好。
我已上传到Linux计算机,但出现此异常:
UnicodeEncodeError: 'ascii' codec can't encode character '\xe8' in position 30: ordinal not in range(128)
我不明白为什么它可以在我的计算机上而不在目标计算机上工作。
谢谢
*编辑*
这是我的代码:
print('hello world é è")
答案 0 :(得分:0)
在文件顶部添加# -*- coding: utf-8 -*-
答案 1 :(得分:0)
尝试这个
a="hello world é è".encode("iso-8859-15")
print(a.decode("iso-8859-15"))
答案 2 :(得分:0)
Linux环境中的语言环境仅支持ASCII。因此,尝试打印非ASCII字符时会出错。
为此的最佳解决方法是将PYTHONIOENCODING变量设置为UTF-8,或将PYTHONUTF8环境变量设置为'1'。例如
$ PYTHONIOENCODING=UTF-8 python myprogram.py
最好的解决方案是设置一个支持UTF-8的语言环境。这可以通过操作系统的区域设置菜单或更改相关的配置文件来完成(这些文件可能在发行版之间有所不同)。 UTF-8是ASCII的超集,因此更改不会引起任何问题(但无论如何都要备份关键数据)。
也可以在打印之前从字符串中去除非ASCII字符,但是这种方法会丢失信息。通过忽略encoding错误,可以完全删除非ASCII字符:
>>> s = 'hello world é è'
>>> print(s.encode('ascii', errors='ignore').decode())
hello world
或unicodedata.normalize函数可用于尝试获得等效的ASCII字符,如果Unicode字符可以分解为ASCII字符和重音符号。
>>> print(ud.normalize('NFD', s).encode('ascii', errors='ignore').decode())
hello world e e