0

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

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

{u'foobar: u'bar}

而其他人则显示为:

{foobar: bar}

它们是等价的吗?你如何在两者之间转换?

4

3 回答 3

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 的网站。

于 2012-04-03T23:19:52.290 回答
3

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

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

请参阅第 2.4.1 节:

'u' 或 'U' 前缀使字符串成为 Unicode 字符串。Unicode 字符串使用 Unicode Consortium 和 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 字符串(以及如何转换或编码字符串)的信息。

于 2012-04-03T23:13:07.707 回答
2

Usingu'string'定义字符串是 unicode 类型。

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

您可以在uncode 文档页面中阅读所有相关信息。

于 2012-04-03T23:13:21.703 回答