从列表中检索时,Python编码的字符串损坏

时间:2018-08-06 14:22:55

标签: python python-2.7 encoding

我有以下列表:

adrList = {0: ['Belgium'], 1: ["Fontaine l'Ev\\xc3\\xaaque"]}
print adrList

adrList可以正确打印:

{0: ['Belgium'], 1: ["Fontaine l'Ev\\xc3\\xaaque"]}

但是,当我从位置1检索编码的值时

city =  adrList[1][0]
print city

我得到以下结果:

Fontaine L'ev\xe3\xaaque

如您所见,两个双反斜杠更改为常规反斜杠,“ xc3”更改为“ xe3”,并且某些大写/小写字符更改。

检索该值后,编码已损坏,对其执行诸如json.dumps()之类的操作将崩溃。为什么会更改,以及如何在不更改的情况下按字面值检索值?

编辑:找到了我的问题的根源:string.capwords在我试图为其分配值的属性的设置器中的值上运行,这使编码混乱。

2 个答案:

答案 0 :(得分:1)

Python 2.7.6,我没有看到类似的问题:

>>> adrList = {0: ['Belgium'], 1: ["Fontaine l'Ev\\xc3\\xaaque"]}
>>> print adrList
{0: ['Belgium'], 1: ["Fontaine l'Ev\\xc3\\xaaque"]}
>>> city =  adrList[1][0]
>>> print city
Fontaine l'Ev\xc3\xaaque

双反斜杠已经消失了(您对print的期望是什么),但是其他一切都保持不变,没有xc3变成xe3或其他任何东西。

此外,我认为您实际上不需要双斜杠,它可以更正确地工作:

>>> adrList = {0: ['Belgium'], 1: ["Fontaine l'Ev\xc3\xaaque"]}
>>> print adrList
{0: ['Belgium'], 1: ["Fontaine l'Ev\xc3\xaaque"]}
>>> city =  adrList[1][0]
>>> print city
Fontaine l'Evêque
>>> 

答案 1 :(得分:0)

找到了错误的根源:string.capwords正在我试图分配该值的属性的设置器上运行,这使编码混乱。这就解释了与我最初发布的示例代码的区别。