Django: 'ascii' 编码无法解码位置 1035 的字节 0xc3: 序号不在范围(128)内
Django 1.6
Python 3
Nginx, uWsgi
关于这个错误有很多讨论,但我找到的解决办法对我都不适用。
我有一个网页应用,可以上传一个包含xml文件的tar压缩包,用于导入数据。
在我本地机器上,用“python manage.py runserver”运行这个应用时,导入过程非常顺利。但是在我的虚拟服务器上,用Nginx和uWsgi运行时,我遇到了这个错误:
UnicodeDecodeError at /sync/upload/
'ascii' codec can't decode byte 0xc3 in position 1035: ordinal not in range(128)
这个错误发生在我写的最后一行代码上,后面的代码也是从这里开始运行的:
xml = f.read() <- My line
return codecs.ascii_decode(input, self.errors)[0]
因为在我的系统上这一切都能正常工作,但在虚拟服务器上却不行,所以我猜问题可能是某种配置问题。到目前为止,我尝试在Nginx启动之前设置LANG和LC_ALL,还在“open(xmlfile) as f”时提供了encoding='utf-8'这个属性。此外,我还尝试了很多不同的方法来手动编码。
所以现在我已经没有其他选择了。
我在瑞士,使用的是en_US.UTF-8的ArchLinux机器。虚拟服务器是Debian系统,我不知道怎么配置默认字符集,这是否相关。任何帮助都非常欢迎。
谢谢,祝好,
Adrian
1 个回答
0
你在明确使用 ascii_decode
这个功能。所以语言设置就不在讨论范围内了。ascii_decode
只能处理范围在 0 到 127 之间的字节。但是 0xc3 = 195,已经超过了 127。所以你在用另一个文件测试你的服务器,这个文件里面有一些字节的值大于 127。通常情况下,xml读取器处理的是字节而不是字符串,所以解码其实是没必要的,因为编码信息已经在xml文件里面给出了。