解码不反转Django/Python中的unicode编码

2024-04-26 02:45:16 发布

您现在位置:Python中文网/ 问答频道 /正文

好的,我有一个硬编码的字符串,我声明如下

name = u"Par Catégorie"

我有一个#--编码:utf-8--魔术头,所以我猜它被转换成了utf-8

在这条路上,它通过

^{pr2}$

我得到一个

UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 3: ordinal not in range(128)

我的大部分数据是法语的,并且在CDATA节点中被正确地输出,但是这个harcoded字符串保留了。。。我不明白为什么要调用ascii编解码器。在

怎么了?在


Tags: 字符串namein声明编码ascii魔术can
2条回答

参数名称错误?从the doc中,我可以看到关键字参数名应该是encoding,而不是{}。在

源文件中的coding头告诉Python您的源代码是什么编码的。这是Python用来将unicode字符串文本(u"Par Catégorie")的源代码解码为unicode对象的编码。unicode对象本身没有编码;它是原始unicode数据。(在内部,Python将使用两种编码中的一种,这取决于它的配置方式,但Python代码不必担心这一点。)

您得到的unicodedecoderror意味着,您正在某处混合unicode字符串和bytestring(普通字符串)。当将它们混合在一起(连接、执行字符串插值等)时,Python将尝试通过使用默认编码ASCII对bytestring进行解码,将bytestring转换为unicode字符串。如果bytestring包含非ASCII数据,这将失败,并显示错误。正在执行的操作可能在某个库中,但这仍然意味着您正在混合不同类型的输入。在

不幸的是,只要bytestrings只包含ASCII数据就可以正常工作,这意味着即使在库代码中,这种类型的错误也太频繁了。python3.x通过消除unicode字符串(3.x中只有str)和bytestrings(3.x中的bytes类型)之间的隐式转换来解决这个问题

相关问题 更多 >

    热门问题