2024-06-13 16:52:18 发布
网友
我得到了一个集合,其中填充了JSON中存在的值,当我打印集合时,我得到了以下输出:
set(['Path\xc3\xa9', 'Synergy Cin\xc3\xa9ma'])
但是如果我使用for循环打印每个元素,我会得到以下输出:
Pathé Synergy Cinéma
为什么每个单词的编码都不一样?你知道吗
我猜您使用的是python2,它可能与默认的编码行为有关。存储在集合中的值是“encoded”值,当您使用print(基于对象的底层__repr__和/或__str__方法)时,您将获得解码/格式化的输出(根据默认的系统编码)。你知道吗
print
__repr__
__str__
您可以获得有关与函数sys.getdefaultencoding()一起使用的默认编码的信息
sys.getdefaultencoding()
请注意,在Python3中,默认情况下编码是utf-8(即根据documentation,默认情况下“创建的任何字符串(…)都存储为Unicode”),并且您不会有完全相同的行为(您可以在Python2片段中看到散列值,因为pythonset是基于它们的,如果输入字符串是否编码,则相同):
utf-8
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
我猜您使用的是python2,它可能与默认的编码行为有关。存储在集合中的值是“encoded”值,当您使用
print
(基于对象的底层__repr__
和/或__str__
方法)时,您将获得解码/格式化的输出(根据默认的系统编码)。你知道吗您可以获得有关与函数
sys.getdefaultencoding()
一起使用的默认编码的信息请注意,在Python3中,默认情况下编码是
utf-8
(即根据documentation,默认情况下“创建的任何字符串(…)都存储为Unicode”),并且您不会有完全相同的行为(您可以在Python2片段中看到散列值,因为pythonset
是基于它们的,如果输入字符串是否编码,则相同):Python 2:
Python 3:
相关问题 更多 >
编程相关推荐