很多人都有这个问题,但提出的解决方案对我没有帮助。
在我的ubuntu机器上,脚本运行没有错误。但是在我的raspi上不断出现这个错误:
UnicodeEncodeError: 'ascii' codec can't encode character '\xd6' in position 21: ordinal not in range(128)
错误提示德语字符(变音符号,ö)应使用print(a_name)
令我困惑的是:在致电 python3 myscript.py
时,我在raspi上没有任何错误。但是通过电话python3 myscript.py
> output
,我收到了错误消息。与nohup python3 myscript.py
或从crontab运行时相同:
@reboot LANG=de_DE.UTF-8 /home/pi/launcher.sh > /home/pi/bot/logs/cronlog 2>&1
其中 launcher.sh 使用以下代码:
python3 myscript.py > pythonlog 2>&1
我查看了 $ LANG
在我的ubuntu pc上(我没有收到任何错误): en_US.UTF-8
on raspi: de_DE.UTF-8
为什么我收到此错误消息,如何摆脱它?
答案 0 :(得分:5)
您是否尝试过设置环境变量PYTHONIOENCODING
?
export PYTHONIOENCODING=UTF-8
python3 myscript.py > pythonlog 2>&1
答案 1 :(得分:3)
在正常情况下,Python使用区域设置来计算要应用于stdout的编码。
当Python没有交互式会话时,即当输入或输出通过管道传输或重定向时,Python在stdout和stdin上默认为“ASCII”编码。
要覆盖此行为,请使用PYTHONIOENCODING
环境变量设置适当的输入/输出编码。 E.g。
PYTHONIOENCODING=utf-8 echo "test €3.20" | myscript.py > output.txt