2012-04-03 70 views
0

这是一个完整的noob问题....python中的字符串变体 - 它们是什么意思?

但为什么在一些Python字符串显示为:

{u'foobar: u'bar} 

而其他如出现:

{foobar: bar} 

他们是等价?你如何在两者之间进行转换?

+0

需要注意的是,所有字符串都是Python 3.x中的Unicode字符串。 – 2012-04-03 23:13:43

+0

另请参阅Ned Batchelder关于Unicode的25分钟讲座。他非常好地解释了Unicode与字符串的区别。 http://nedbatchelder.com/text/unipain.html – 2012-04-03 23:54:13

回答

3

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

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

请参见2.4.1:

'u' 或 'U' 的前缀,使字符串Unicode字符串。 Unicode 字符串使用由Unicode 联合会和ISO 10646定义的Unicode字符集。下面描述的一些其他转义序列 可用于Unicode字符串。在Python 2中忽略'b'或'B'的前缀 ;它表示文字在Python 3中应该成为 字节字面值(例如,当代码自动转换为 时为2to3)。 'u'或'b'前缀可以后跟'r'前缀。

正如你所看到的,Python将能够自动比较各种编码的字符串:

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

您可以了解更多关于在Python Unicode字符串(以及如何转换或编码字符串)通过参考documentation

2

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

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

您可以在uncode documentation page中阅读关于它的全部内容。

3

不,他们是不等价的

的“U”是前缀字符串意味着它的统一。 Unicode被设计为扩展字符集以适应不是英语的语言。你可以阅读这个有趣和非技术性的Unicode历史。

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

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

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

相关问题