尝试打印字节字符串的字符时出现奇怪的行为

时间:2015-11-21 11:14:45

标签: python bytestring

为什么这段短代码与其他代码的运行方式不同?

# -*- coding: utf-8 -*-
for c in 'aɣyul':
    print c

我在每次运行中的输出是:

# nothing
---
a
---
l
---
u
l
---
a
y
u
l
...etc

编辑:

我知道如何解决问题,问题是为什么Python在每次运行时打印字符串的不同部分而不是相同的部分?

1 个答案:

答案 0 :(得分:1)

你需要在你的字符串的前面添加一个u,这使得python以你的字符串作为unicode,并在打印时解码你的角色:

>>> for c in u'aɣyul':
...     print c
... 
a
ɣ
y
u
l

请注意,如果没有编码,python将在两个单独的十六进制值中打破unicode字符,并且在每个打印中,您将获得此十六进制值的字符串表示形式:

>>> 'aɣyul'
'a\xc9\xa3yul'
    ^   ^

如果你想知道为什么python将unicode分解为2的十六进制值,因为str的实例包含原始的8位值,而unicode字符使用超过8位的内存。

您也可以手动解码十六进制值:

>>> print '\xc9\xa3'.decode('utf8')
ɣ
相关问题