Python 3.x 如何在忽略不可编码字符的情况下输出Python3(unicode)字符串
考虑以下终端命令行Python 3.x 如何在忽略不可编码字符的情况下输出Python3(unicode)字符串,python-3.x,unicode,character-encoding,Python 3.x,Unicode,Character Encoding,考虑以下终端命令行 python3 -c 'print("hören")' 在大多数终端上打印“hören”(德语中“to hear”的意思),在某些终端上会出现错误 UnicodeEncodeError: 'ascii' codec can't encode character '\xf6' in position 1: ordinal not in range(128) 在我的Python3程序中,我不希望仅仅打印出来的东西会引发这样的异常,相反,我更希望输出不会引发异常的字符 所以我
python3 -c 'print("hören")'
在大多数终端上打印“hören”(德语中“to hear”的意思),在某些终端上会出现错误
UnicodeEncodeError: 'ascii' codec can't encode character '\xf6'
in position 1: ordinal not in range(128)
在我的Python3程序中,我不希望仅仅打印出来的东西会引发这样的异常,相反,我更希望输出不会引发异常的字符
所以我的问题是:如何在忽略不可编码字符的情况下以Python3(unicode)字符串输出?
一些注释 我到目前为止所做的尝试
sys.stdout.write
而不是print
,但编码问题仍然可能发生bytes=line.encode('utf-8')
这不会在打印时引发异常,但即使在有能力的终端中,非ascii字符也会被其代码点编号替换decode
方法和'ignore'
参数:
bytes=line.encode('utf-8')
decoded=bytes.decode('utf-8', 'ignore')
print(decoded)
但问题不在于字符串中的解码,而在于打印函数中的编码- macOS上Emacs内部的bash shell
- 通过
接收Applescript中的“打印”字符串,例如:do shell script
set txt to do shell script "/usr/local/bin/python3 -c \"print('hören')\" "
更新:这些终端都从
区域设置返回。GetPreferredEncode()
值US-ASCII
我的首选方法是根据您使用的终端设置变量
对于启用UTF-8的终端,您可以执行以下操作:
export PYTHONIOENCODING='utf-8'
export PYTHONIOENCODING='ascii:replace'
要在ASCII终端中打印“?”,可以执行以下操作:
export PYTHONIOENCODING='utf-8'
export PYTHONIOENCODING='ascii:replace'
或者更好,如果您不关心编码,您应该能够:
export PYTHONIOENCODING=':replace'
回答得好!我在设置
export LANG=en_AU.UTF-8
方面取得了一定的成功,但这相当于bruce force;你的方法更有针对性。