在 linux 上打印重音时出现异常
exception when printing accents on linux
我写了一个非常基本的 python3.5 脚本,它在控制台中显示一条带有打印功能的消息。
此脚本在我的个人计算机上运行良好。
我已上传到 linux 计算机,但出现此异常:
UnicodeEncodeError: 'ascii' codec can't encode character '\xe8' in position 30: ordinal not in range(128)
我不明白为什么它能在我的电脑上运行,而在目标电脑上却不能运行。
谢谢
* 编辑 *
这是我的代码:
print('hello world é è")
在文件顶部添加 # -*- coding: utf-8 -*-
试试这个
a="hello world é è".encode("iso-8859-15")
print(a.decode("iso-8859-15"))
您的 Linux 环境中的语言环境仅支持 ASCII。因此,在尝试打印 non-ASCII 个字符时会出现错误。
最好的解决方法 是将 PYTHONIOENCODING variable to UTF-8, or set the PYTHONUTF8 环境变量设置为“1”。例如
$ PYTHONIOENCODING=UTF-8 python myprogram.py
最好的解决方案 是设置支持 UTF-8 的语言环境。这可以通过操作系统的区域设置菜单或通过更改相关配置文件(文件可能因发行版而异)来完成。 UTF-8 是 ASCII 的超集,因此更改不会导致任何问题(但无论如何都要备份关键数据)。
也可以在打印前从字符串中去除 non-ASCII 个字符,但这种方法会丢失信息。 Non-ASCII 个字符可以通过忽略 encoding 个错误完全删除:
>>> 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
我写了一个非常基本的 python3.5 脚本,它在控制台中显示一条带有打印功能的消息。
此脚本在我的个人计算机上运行良好。
我已上传到 linux 计算机,但出现此异常:
UnicodeEncodeError: 'ascii' codec can't encode character '\xe8' in position 30: ordinal not in range(128)
我不明白为什么它能在我的电脑上运行,而在目标电脑上却不能运行。
谢谢
* 编辑 *
这是我的代码:
print('hello world é è")
在文件顶部添加 # -*- coding: utf-8 -*-
试试这个
a="hello world é è".encode("iso-8859-15")
print(a.decode("iso-8859-15"))
您的 Linux 环境中的语言环境仅支持 ASCII。因此,在尝试打印 non-ASCII 个字符时会出现错误。
最好的解决方法 是将 PYTHONIOENCODING variable to UTF-8, or set the PYTHONUTF8 环境变量设置为“1”。例如
$ PYTHONIOENCODING=UTF-8 python myprogram.py
最好的解决方案 是设置支持 UTF-8 的语言环境。这可以通过操作系统的区域设置菜单或通过更改相关配置文件(文件可能因发行版而异)来完成。 UTF-8 是 ASCII 的超集,因此更改不会导致任何问题(但无论如何都要备份关键数据)。
也可以在打印前从字符串中去除 non-ASCII 个字符,但这种方法会丢失信息。 Non-ASCII 个字符可以通过忽略 encoding 个错误完全删除:
>>> 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