【问题标题】:Latin letters with acute : DjangoUnicodeDecodeError带有尖锐的拉丁字母:DjangoUnicodeDecodeError
【发布时间】:2009-08-31 00:11:44
【问题描述】:

我在读取要插入 mysql db 表的 txt 文件时遇到问题,请查看以下代码:

文件包含第一行:“aclaración

archivo = open('file.txt',"r")
对于档案中的行。readlines():
....body = 身体 + 线条
模型 = MyModel(body=body)
模型.save()

我得到一个 DjangoUnicodeDecodeError:

'utf8' 编解码器无法解码位置 8 中的字节:无效数据。你传入了 'aclaraci\xf3n' (type 'str') Unicode 错误提示

无法编码/解码的字符串是:araci�n。

我尝试了 body.decode('utf-8'), body.decode('latin-1'), body.decode('iso-8859-1') 没有解决方案。

你能帮帮我吗?任何提示都表示赞赏:)

【问题讨论】:

    标签: python django utf-8 character-encoding


    【解决方案1】:

    从 'ó' 的 \xf3 代码来看,看起来数据确实是用 ISO-8859-1(或一些近亲)编码的。所以body.decode('iso-8859-1') 应该是一个有效的 Unicode 字符串(你没有指定“没有解决方案”是什么意思——你得到什么错误信息,在哪里?);如果你需要的是一个 utf-8 编码的字节串,body.decode('iso-8859-1').encode('utf-8') 应该给你一个!

    【讨论】:

    • 感谢 Alex,在这里回答您的问题:>manage.py shell Python 2.5.4 (InteractiveConsole) >>> a = 'á' >>> a '\xa0' >>> a. decode('iso-8859-1').encode('utf-8') '\xc2\xa0' >>> test = unicode(a) Traceback(最近一次调用最后):文件“”,行1、在 UnicodeDecodeError: 'ascii' codec can't decode byte 0xa0 in position 0: ordinal not in range(128)
    • test=unicode(a) 中,您隐式使用 ascii 编解码器,因为错误消息如此清楚地告诉您,所以它当然会失败。如果您知道 a 在 ISO-8859-1 中编码,请使用 unicode(a,'iso-8859-1')。如果您将编码/解码序列的结果分配给另一个变量,例如 b,unicode(b, 'utf-8') 将起作用。等等,等等。也许你只是以这种方式调用编码和解码,而不是分配然后使用它们的结果......?!请记住字符串是不可变的,因此方法调用不会更改它们:它们返回 RESULTS(分配它们并使用它们!-)。
    猜你喜欢
    • 1970-01-01
    • 2015-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-02
    • 2017-08-04
    • 2021-01-07
    • 1970-01-01
    相关资源
    最近更新 更多