【问题标题】:Accentuation in python: structure and for looppython中的重音:结构和for循环
【发布时间】:2016-03-21 16:49:55
【问题描述】:

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

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

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

Pathé
Synergy Cinéma

为什么我没有为每个单词获得相同的编码?

【问题讨论】:

    标签: python encoding non-ascii-characters


    【解决方案1】:

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

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

    请注意,在 python 3 中,默认情况下编码为 utf-8(即,根据documentation,默认情况下“任何创建的字符串 (...) 都存储为 Unicode”)并且您不会有完全相同的行为(您可以在 python 2 sn-p 中看到散列值,因为 python sets 基于它们,无论您的输入字符串是否被编码,都是相同的):

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-18
      • 1970-01-01
      • 1970-01-01
      • 2018-08-12
      • 2011-03-20
      • 1970-01-01
      • 1970-01-01
      • 2012-01-31
      相关资源
      最近更新 更多