编码问题
错误问题如下:
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-3: ordinal not in range(128)
我写的Python程序中输出了一些中文(编码是utf-8),在shell中直接执行没有问题,但是crontab执行时出现了UnicodeEncodeError的错误,Google了一下发现这个问题不仅仅是在crontab中会出现,在使用管道或者重定向的时候都会出现这个问题,原因是编码不同。
在终端中直接执行Python程序时,Python会将输出内容自动编码为终端所使用的编码,我使用的终端编码是utf-8,所以不会出错,输出的内容也是正常的。但是在使用管道或者重定向时,编码格式为ascii,Python会用ascii编码格式去encode输出的字符串,但是字符串的编码使用的时utf-8,所以会出现UnicodeEncodeError的错误。
解决方法如下:
方法一:在程序中可能输出中文的字符串都加上encode('utf-8');
方法二:在crontab第一行加上PYTHONIOENCODING=utf-8,将Python的stdout/stderr/stdin编码设置为utf-8。