在Linux上打印重音符号时发生异常

时间:2019-05-23 06:15:21

标签: python linux character-encoding non-ascii-characters python-unicode

我写了一个非常基本的python3.5脚本,该脚本在带有打印功能的控制台中显示一条消息。

此脚本在我的个人计算机上效果很好。

我已上传到Linux计算机,但出现此异常:

UnicodeEncodeError: 'ascii' codec can't encode character '\xe8' in position 30: ordinal not in range(128)

我不明白为什么它可以在我的计算机上而不在目标计算机上工作。

谢谢

*编辑*

这是我的代码:

print('hello world é è")

3 个答案:

答案 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