django.utils.encoding.DjangoUnicodeDecodeError

jac*_*ack 2 python django utf-8

当尝试通过通用关系向 Django 模型添加条目时,出现以下错误。

django.utils.encoding.DjangoUnicodeDecodeError: 'utf8' codec can't decode byte 0xb8 in position 24: unexpected code byte. You passed in 'ASL/60Styles_Timeless-3_\xb8 CaLe.asl' (<type 'str'>)
Run Code Online (Sandbox Code Playgroud)

模型是这样的:

class MD5(models.Model):
    value = models.CharField(max_length=32, db_index=True)
    filename = models.CharField(max_length=100)
    content_type = models.ForeignKey(ContentType)
    object_id = models.PositiveIntegerField()
    content_object = generic.GenericForeignKey()
Run Code Online (Sandbox Code Playgroud)

表的字符集是 utf8,排序规则是 utf8_general_ci。

这是否意味着文件名不是有效的 utf8 字符串?如何修复此错误或者我们可以将无效字符串转换为有效格式吗?

use*_*673 5

您的文件系统显然没有使用 UTF-8 编码:

\n\n
>>> a = \'ASL/60Styles_Timeless-3_\\xb8 CaLe.asl\'\n>>> print a.decode(\'utf-8\')\nTraceback (most recent call last):\n  File "<stdin>", line 1, in <module>\n  File "/usr/lib/python2.5/encodings/utf_8.py", line 16, in decode\n    return codecs.utf_8_decode(input, errors, True)\nUnicodeDecodeError: \'utf8\' codec can\'t decode byte 0xb8 in position 24: unexpected code byte\n>>> a.decode(\'iso8859-2\')\nu\'ASL/60Styles_Timeless-3_\\xb8 CaLe.asl\'\n>>> print a.decode(\'iso8859-2\')\nASL/60Styles_Timeless-3_\xc2\xb8 CaLe.asl\n
Run Code Online (Sandbox Code Playgroud)\n\n

现在我才意识到你得到的字符串实际上已经是unicode了。尝试使用它来获取 unicode:

\n\n
>>> a.decode(\'raw_unicode_escape\')\nu\'ASL/60Styles_Timeless-3_\\xb8 CaLe.asl\'\n
Run Code Online (Sandbox Code Playgroud)\n