我发现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 ??在此先感谢!!
答案 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字符串。