python中的字符串变化 - 它们是什么意思?

时间:2012-04-03 23:08:54

标签: python

这是一个完整的菜鸟问题......

但为什么python中的某些字符串显示为:

{u'foobar: u'bar}

而其他人则显示为:

{foobar: bar}
它们是等价的吗?你如何在两者之间转换?

3 个答案:

答案 0 :(得分:3)

u前缀表示字符串是Unicode ..

http://docs.python.org/reference/lexical_analysis.html

参见第2.4.1节:

  

前缀'u'或'U'使字符串成为Unicode字符串。统一   字符串使用Unicode定义的Unicode字符集   Consortium和ISO 10646.描述了一些额外的转义序列   下面,提供Unicode字符串。前缀'b'或'B'是   在Python 2中被忽略;它表明文字应该成为一个   Python 3中的字节文字(例如,代码自动转换时)   用2to3)。 “u”或“b”前缀后面可以跟一个“r”前缀。

如您所见,Python将能够自动比较各种编码的字符串:

>>> a = u'Hello'
>>> b = 'Hello'
>>> c = ur'Hello'
>>> a == b
True
>>> b == c
True

您可以参考documentation了解有关Python中Unicode字符串的更多信息(以及如何转换或编码字符串)。

答案 1 :(得分:3)

不,它们不等同

字符串前缀的“u”表示它是Unicode。 Unicode被设计为扩展字符集,以适应非英语语言。您可以阅读Unicode的有趣和非技术历史。

http://www.reigndesign.com/blog/love-hotels-and-unicode/

正如Lattyware所提到的,在Python 3.x中,所有字符串都是Unicode。

如果您正在使用Python 2.x,特别是对于Web,那么值得确保您的程序正确处理Unicode。很多人喜欢抱怨不支持Unicode的网站。

答案 2 :(得分:2)

使用u'string'定义字符串是unicode类型。

>>> type('hi')
<type 'str'>
>>> type(u'hi')
<type 'unicode'>

您可以在uncode documentation page中阅读所有相关内容。