繁体   English   中英

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

[英]Decoding not reversing unicode encoding in Django/Python

好,我有一个这样声明的硬编码字符串

name = u"Par Catégorie"

我有一个#-- 编码:utf-8--魔术头,所以我猜想它已经转换为utf-8

一直到通过它输出到xml

xml_output.toprettyxml(indent='....', encoding='utf-8')

我得到一个

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

我的大部分数据都使用法语,并且在CDATA节点中正确输出,但是保留了一个经过编码的字符串...我不知道为什么要调用ascii编解码器。

怎么了 ?

源文件中的coding标头告诉Python 源采用的是哪种编码。它是Python用于将Unicode字符串文字( u"Par Catégorie" )的源解码为unicode对象的编码。 unicode对象本身没有编码。 它是原始的unicode数据。 (在内部,Python将使用两种编码之一,具体取决于其配置方式,但Python代码不必为此担心。)

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

不幸的是,只要字节串仅包含ASCII数据就可以正常工作,这意味着即使在库代码中,此类错误也非常常见。 Python 3.x通过消除unicode字符串(在3.x中仅为str )和字节串(在3.x中为bytes类型)之间的隐式转换解决了该问题。

参数名称错误? 文档中 ,我可以看到关键字参数名称应该是encoding而不是coding

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM