python中的重音:结构和for循环

2024-06-13 16:52:18 发布

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

我得到了一个集合,其中填充了JSON中存在的值,当我打印集合时,我得到了以下输出:

set(['Path\xc3\xa9', 'Synergy Cin\xc3\xa9ma'])

但是如果我使用for循环打印每个元素,我会得到以下输出:

Pathé
Synergy Cinéma

为什么每个单词的编码都不一样?你知道吗


Tags: pathjson元素编码for单词set我会
1条回答
网友
1楼 · 发布于 2024-06-13 16:52:18

我猜您使用的是python2,它可能与默认的编码行为有关。存储在集合中的值是“encoded”值,当您使用print(基于对象的底层__repr__和/或__str__方法)时,您将获得解码/格式化的输出(根据默认的系统编码)。你知道吗

您可以获得有关与函数sys.getdefaultencoding()一起使用的默认编码的信息

请注意,在Python3中,默认情况下编码是utf-8(即根据documentation,默认情况下“创建的任何字符串(…)都存储为Unicode”),并且您不会有完全相同的行为(您可以在Python2片段中看到散列值,因为pythonset是基于它们的,如果输入字符串是否编码,则相同):

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

相关问题 更多 >