Python编码的字符串在从lis检索时会损坏

2024-06-18 11:31:02 发布

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

我有以下清单:

adrList = {0: ['Belgium'], 1: ["Fontaine l'Ev\\xc3\\xaaque"]}
print 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()之类的操作将崩溃。为什么它会改变,如何在不改变的情况下从字面上检索值

Edit:找到了问题的根源:string.capwords正在我试图将此值赋给的属性的setter中的值上运行,这将破坏编码


Tags: city编码列表字符常规printev斜杠
2条回答

找到了错误的来源:string.capwords正在我试图将此值赋给的属性的setter上运行,这将破坏编码。这就解释了与我最初发布的示例代码的区别

Python2.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
>>> 

相关问题 更多 >