有一个用python写的web应用程序,运行在Ubuntu 16.04 LST + Apache2 + cgi上。本来一切都OK,今天突然发现当路径或文件名是中文时,python会报错 UnicodeEncodeError ‘ascii’ codec can’t encode characters in position ordinal not in range(128)
baidu, google发现网上有一些答案,基本说来就是需要确定在Apache2中LANG, LC_ALL是被正确设定的。在local console里通过
linux命令 locale,或者python里通过locale.getlocale()得到的信息只是针对local 环境的,不能够代表Apache里的。
可以参考 https://itekblog.com/ascii-codec-cant-encode-characters-in-position/
这篇文章给了我很大启发,让我知道可以在第一个运行的python文件里去locale.setlocale, sys.setdefaultencoding等等,但是问题还是没有解决。
在花了n多小时后,终于发现问题所在了。
问题解决的第一步:
- Apache2的环境变量设置,很多人都说是在/etc/apache2/envvars里,如
- 也可以把#. /etc/