终端中的 Python 字符处理

标签 python unicode character-encoding terminal output

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

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

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

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

按预期工作。

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

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

>>> "ü"
'\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 如何存储各种数据类型以及哪些函数需要哪些输入。这一切都非常令人困惑,并且还取决于您终端的 LOCALE 设置。

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

所有 str 对象(例如 "My String")都存储为每个字符 8 位。在您的情况下, '\xc3\xbc' 是 UMLAUT-U 作为 str 对象的 utf8 表示形式。

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

现在,print 函数需要 str 对象作为输入。这就是为什么下面的方法有效。

>>> print '\xc3\xbc'
ü

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

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

关于终端中的 Python 字符处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26746127/

相关文章:

java - 解析 JSON 时无法识别的字符

c# - Vici coolstorage 文本字段在 WP7 应用程序中未正确显示(某些字符丢失)

在 C 中从二进制转换为 char

python - PermissionError:[WinError 5]访问被拒绝:[4776]运行docker-compose up时无法执行脚本docker-compose

python - For 循环遍历单个列表中的多个变量

python - 将 Selenium HTML 字符串传递给 Scrapy 以将 URL 添加到要抓取的 URL 的 Scrapy 列表

python - Windows PC 上的 IPython 并行计算?

C++ 在 Unicode 而不是 Ansi 中创建文件

javascript - 如何将日本国旗字符🇯🇵放入字符串中?

parsing - Mime 编码 header 带有额外的 '=' (==?utf-8?b?base64string?=)