【问题标题】:Python character handling in terminal终端中的 Python 字符处理
【发布时间】:2014-11-04 22:18:10
【问题描述】:

我在交互式 Python 2.7 终端中(终端默认输出为“utf-8”)。我有一个来自互联网的字符串,我们称之为a

>>> a
u'M\xfcssen'
>>> a[1]
u'\xfc'

我想知道为什么它的值不是ü 所以我试试

>>> print(a)
Müssen
>>> print(a[1])
ü

按预期工作。

所以我的第一个问题是,print a 是做什么的,如果我只输入 a 就会丢失?

出于好奇:为什么我在同一个 python 终端会话中得到以下输出?

>>> "ü"
'\xc3\xbc'
>>> print "ü"
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/codecs.py", line 351, in write
    data, consumed = self.encode(object, self.errors)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 0: ordinal not in range(128)
>>> print u"ü"
ü

【问题讨论】:

    标签: python unicode character-encoding terminal output


    【解决方案1】:

    您必须了解 python 如何存储各种数据类型以及哪些函数需要哪些输入。这一切都非常令人困惑,还取决于您终端的 LOCALE 设置。

    以下链接可能有助于减少混淆:https://pythonhosted.org/kitchen/unicode-frustrations.html

    "My String" 这样的所有str 对象都存储为每个字符8 位。在您的情况下,'\xc3\xbc' 是将 UMLAUT-U 的 utf8 表示为 str 对象。

    对于unicode 对象,python 使用 16 位或 32 位整数来存储字符串。

    现在print 函数需要str 对象作为输入。这就是为什么以下工作。

    >>> print '\xc3\xbc'
    ü
    

    将 UMLAUT-U 从 str 转换为 unicode 对象。在将其转换为 unicode 对象之前,您必须告诉 python 该字符串是 UTF8 表示形式。

    >>> unicode('\xc3\xbc'.decode('utf8'))
    u'\xfc'
    

    【讨论】:

      【解决方案2】:

      print a 是做什么的,如果我只输入 a 就会丢失?

      交互式&gt;&gt;&gt; 提示使用值的 Python 源代码表示形式输出值,由repr() 函数返回。这就是为什么您不仅会得到\xFCü 字符,而且还会在字符串周围得到引号。提示试图向您展示您需要在 Python 程序中键入什么来获取您拥有的字符串值。

      print 语句输出值的原始字符串转换,由str() 函数返回。

      对于某些类型 repr()str() 生成相同的输出,但字符串不是这种情况。

      【讨论】:

        猜你喜欢
        • 2015-09-10
        • 2017-03-19
        • 1970-01-01
        • 2021-11-14
        • 1970-01-01
        • 1970-01-01
        • 2013-04-29
        • 2011-06-09
        • 2016-09-01
        相关资源
        最近更新 更多