【问题标题】:UnicodeDecodeErrorUnicode解码错误
【发布时间】:2013-04-14 06:27:04
【问题描述】:

我遇到了 UnicodeDecodeError,

'utf8' codec can't decode byte 0xe5 in position 1923: invalid continuation byte

我在模板中使用了丹麦字母“å”。我该如何解决这个问题,然后我可以在我的 Django 项目和数据库中使用非英文字母?

【问题讨论】:

  • 您确定您的数据实际上是 UTF-8 格式吗?
  • 看起来像 iso-8859-1 而不是 utf-8。
  • 我想知道你的模板的底层字节是什么样的(比如来自hexdump)。您的字符 å 是 Unicode codepoint e5,但在 UTF-8 中实际字节为 c3 a5。请参阅:hexutf8.com/?q=#å 如果 Python 遇到字节 e5,它将出错,因为这不是有效的 UTF-8 字节序列:hexutf8.com/?q=e5

标签: python django


【解决方案1】:

这样做我会得到一个类似的错误(提到相同的字节值):

>>> 'å'.encode('latin-1')
b'\xe5'
>>> _.decode('utf-8')
Traceback (most recent call last):
  File "<pyshell#18>", line 1, in <module>
    _.decode('utf-8')
UnicodeDecodeError: 'utf8' codec can't decode byte 0xe5 in position 0: unexpected end of data

这意味着您的数据是以 latin-1 而不是 utf-8 编码的。一般来说,有两种解决方案:如果您可以控制输入数据,请将其重新保存为 UTF-8。否则,当您在 Python 中读取数据时,请将编码设置为 latin-1。对于 django 模板,您应该可以使用第一个 - 您使用的编辑器应该在某处有一个“编码”选项,将其更改为 utf-8,重新保存,一切都应该工作。

【讨论】:

  • 嗨,lvc 感谢您的回答,现在我已将编码更改为 utf-8 ,错误消失了,但它无法在 borwser 中显示字母“æ,ø,å”,它显示为空方块而是。
  • @hln 检查生成的 HTML 是否覆盖客户端的 charset 设置(HTML/HTTP 使用术语 'charset' 而不是 'encoding',但它是同一回事) .这会在不同的地方导致同样的问题。请注意,用于向客户端发送数据的编码不必与用于输入服务器代码(包括模板文件)的编码相同 - 所需要的只是服务器说出有关它的编码的真相用途。如果您在模板代码中删除它的任何设置,django 应该做正确的事情。
  • 如果这没有帮助,您可能会更幸运地提出一个新问题(因为您现在遇到的错误与此问题所涉及的错误不同)。
【解决方案2】:

这对我有帮助 https://stackoverflow.com/a/23278373/2571607

基本上,打开C:\Python27\Lib\mimetypes.py

替换

‘default_encoding = sys.getdefaultencoding()’

if sys.getdefaultencoding() != 'gbk':  
    reload(sys)  
    sys.setdefaultencoding('gbk')  
default_encoding = sys.getdefaultencoding() 

【讨论】:

    猜你喜欢
    • 2021-09-01
    • 2016-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-28
    • 2014-06-26
    • 1970-01-01
    相关资源
    最近更新 更多