我有一个充满了JSON中存在的值的集合,当我打印我的集合时,我得到了以下输出:
set(['Path\xc3\xa9', 'Synergy Cin\xc3\xa9ma'])
但如果我使用for循环打印每个元素,我会得到以下输出:
Pathé
Synergy Cinéma
为什么我对每个单词都没有相同的编码?
答案 0 :(得分:1)
我猜你使用的是python 2,它可能与默认的编码行为有关。您的集合中存储的值是“编码”值,当您使用print
(基于对象的基础__repr__
和/或__str__
方法)时,您将获得解码/格式化输出(根据默认的系统编码)。
您可以获取有关函数sys.getdefaultencoding()
请注意,在python 3中,默认情况下编码为utf-8
(即默认情况下,“创建的任何字符串(...)都存储为Unicode”,根据documentation),您不会具有完全相同的行为(您可以在 python 2 片段中看到散列值,如python set
基于它们,如果您的输入字符串是否已编码,则相同):
Python 2:
>>> a = b'Path\xc3\xa9'
>>> a
'Path\xc3\xa9'
>>> print(a)
Pathé
>>> sys.getdefaultencoding()
'ascii'
>>> hash('Pathé')
8776754739882320435
>>> hash(b'Path\xc3\xa9')
8776754739882320435
Python 3:
>>> a = b'Path\xc3\xa9'
>>> a
b'Path\xc3\xa9'
>>> print(a)
b'Path\xc3\xa9'
>>> print(a.decode())
Pathé
>>> sys.getdefaultencoding()
'utf-8'
>>> hash("Pathé")
1530394699459763000
>>> hash(b"Path\xc3\xa9")
1621747577200686773