python不同长度的同一个unicode

时间:2013-12-30 18:40:57

标签: python python-2.7 python-3.x unicode

我发现unicode非常奇怪,在我的理解中,如果我“”+“字符串”,类型将是unicode,但为什么它们的长度不同?

print len(u''+'New York\u200b')
14
print type(u''+'New York\u200b')
<type 'unicode'>
print len(u'New York\u200b')
9
print type(u'New York\u200b')
<type 'unicode'>

我也试图摆脱\ u200b,我认为它是unicode

text = u'New York\u200b'
print text.encode('ascii', errors='ignore')
New York
text = u''+'New York\u200b'
print text.encode('ascii', errors='ignore')
New York\u200b

也得到了不同的结果,我真的很困惑! 顺便说一下,我使用的是python 2.7,是时候改成3.3 ??在此先感谢!!

2 个答案:

答案 0 :(得分:4)

>>> (u''+'New York\u200b').encode('utf-8')
'New York\\u200b'

正如您所看到的,由于'New York\u200b' 不是一个unicode字符串,\u转义 没有任何特殊含义按字面解释,即作为ASCII字符序列\ u 2 0 0 b,因此字符串的长度为{{1 }}。 14仅将字符串转换为unicode,但会导致重新解释内容。将u''放在文字之前使python将其解释为转义,因此作为单个字符,因此字符串的长度为9。

在你的第二个例子中:

u

此处text = u''+'New York\u200b' print text.encode('ascii', errors='ignore') New York\u200b 执行修改字符串中的字符,它只会从.encode转换为unicode

如果您打印两个字符串的内容

,可能会更清楚
str

或者,如果您希望看到实际的unicode表示,请尝试使用代码点9731:

>>> print(u'New York\u200b')  # note: \u200b interpreted as unicode character
New York
>>> print(b'New York\u200b'.decode('ascii'))
New York\u200b

答案 1 :(得分:0)

'New York \ u200b'是一个长度为14的非unicode字符串。
(你把它附加到你的字符串,但它本身不是unicode。)
u'New York \ u200b'是一个长度为9的unicode字符串。