如何解决django ascii错误代码UnicodeDecodeError我的查询包含一些阿拉伯字符
我部署了使用Apache和MySQL的Django项目。所有应用程序功能均正常运行,但是在应用程序的views.py中,当我尝试访问它时,会引发此错误。
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 9735: ordinal not in range(128)
在localhost中可以正常工作,我的查询包含一些阿拉伯字符
我搜索了很多,但没有一个适合我。应用程序的views.py
有很多查询(用于计算),annotate and aggregate
也有Case(When())
?
这是我的错误。日志
[Fri Aug 21 14:30:46.907352 2020] [wsgi:error] [pid 20969:tid 140683116439296] [remote 95.159.84.254:12151] File "/var/www/projectname/venv/lib/python3.6/site-packages/django/views/debug.py",line 94,in technical_500_response
[Fri Aug 21 14:30:46.907356 2020] [wsgi:error] [pid 20969:tid 140683116439296] [remote 95.159.84.254:12151] html = reporter.get_traceback_html()
[Fri Aug 21 14:30:46.907362 2020] [wsgi:error] [pid 20969:tid 140683116439296] [remote 95.159.84.254:12151] File "/var/www/projectname/venv/lib/python3.6/site-packages/django/views/debug.py",line 332,in get_traceback_html
[Fri Aug 21 14:30:46.907379 2020] [wsgi:error] [pid 20969:tid 140683116439296] [remote 95.159.84.254:12151] t = DEBUG_ENGINE.from_string(fh.read())
[Fri Aug 21 14:30:46.907387 2020] [wsgi:error] [pid 20969:tid 140683116439296] [remote 95.159.84.254:12151] File "/usr/lib/python3.6/encodings/ascii.py",line 26,in decode
[Fri Aug 21 14:30:46.907391 2020] [wsgi:error] [pid 20969:tid 140683116439296] [remote 95.159.84.254:12151] return codecs.ascii_decode(input,self.errors)[0]
[Fri Aug 21 14:30:46.907402 2020] [wsgi:error] [pid 20969:tid 140683116439296] [remote 95.159.84.254:12151] UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 9735: ordinal not in range(128)
[Fri Aug 21 14:30:50.086155 2020] [wsgi:error] [pid 20969:tid 140683116439296] [remote 95.159.84.254:12181] Not Found: /favicon.ico
[Fri Aug 21 11:36:30.228905 2020] [mpm_event:notice] [pid 20966:tid 140683347807168] AH00491: caught SIGTERM,shutting down
[Fri Aug 21 11:36:30.330450 2020] [mpm_event:notice] [pid 21882:tid 140691412487104] AH00489: Apache/2.4.29 (Ubuntu) mod_wsgi/4.5.17 Python/3.6 configured -- resuming normal operations
[Fri Aug 21 11:36:30.330585 2020] [core:notice] [pid 21882:tid 140691412487104] AH00094: Command line: '/usr/sbin/apache2'
[Fri Aug 21 12:15:09.336685 2020] [mpm_event:notice] [pid 21882:tid 140691412487104] AH00491: caught SIGTERM,shutting down
[Fri Aug 21 12:15:09.451585 2020] [mpm_event:notice] [pid 22113:tid 139983902116800] AH00489: Apache/2.4.29 (Ubuntu) mod_wsgi/4.5.17 Python/3.6 configured -- resuming normal operations
[Fri Aug 21 12:15:09.451973 2020] [core:notice] [pid 22113:tid 139983902116800] AH00094: Command line: '/usr/sbin/apache2'
[Fri Aug 21 12:51:39.616795 2020] [mpm_event:notice] [pid 22113:tid 139983902116800] AH00491: caught SIGTERM,shutting down
[Fri Aug 21 12:51:39.714991 2020] [mpm_event:notice] [pid 22639:tid 140292123478976] AH00489: Apache/2.4.29 (Ubuntu) mod_wsgi/4.5.17 Python/3.6 configured -- resuming normal operations
[Fri Aug 21 12:51:39.715191 2020] [core:notice] [pid 22639:tid 140292123478976] AH00094: Command line: '/usr/sbin/apache2'
解决方法
如果您要与UTF-8进行相互转换,则它确实具有必须遵循的特定格式。
如果提交的数据不是以UTF-8格式提交的,则不会正确解码为UTF-8
也就是说,如果国际字符(非7位字符)已使用不同的文本编码进行编码,则
- 很可能它们不会解码为UTF-8,给出您所看到的错误
- 解码后的数据将完全错误-就像将英语翻译为法语,然后将[法语]视为德语将其翻译回英语一样-结果将是错误和胡说八道。
对于任何现代系统,尤其是要完全使用多种语言的系统,您应确保所有数据始终以UTF-8格式提交
libidn2
具有功能u8_check
,它将对任何UTF-8编码的数据进行UTF-8验证。
另外,请注意-MySQL中的“ utf8”不是正确的UTF-8,它是早期的实现,并不完全兼容。
您应该改用utf8mb4
-使用较旧的版本也会引起与您所遇到的问题类似的问题-https://medium.com/@adamhooper/in-mysql-never-use-utf8-use-utf8mb4-11761243e434
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。