2016-04-30 45 views
0

我作为波纹管字典()的Python外语

mapper = {'А': 1, 'Б': 1} 
mapper 

mapper = {u'А': 1, u'Б': 1} 
mapper 

А,Б - 俄罗斯字母。 这两个我们已经

{u'\u0410': 1, u'\u0411': 1} 

的Python 2.7

什么是正确的方法是什么?谢谢

+2

使用Python 3没有区别 –

+0

对不起我fogotten告诉我用2.7 – Edward

+0

那么你不能在相同的输出两种情况 –

回答

2

如果你使用的是Python 3,这三种方法都是一样的。

随着Python 2,事情变得棘手。如果您使用第一种或第二种方法,则必须在文件顶部包含一个编码(如果有的话)(如果有的话),否则Python会抱怨您在代码中包含非ASCII字符:

#!/usr/local/bin/python 
# coding: utf-8 

如果使用第一种方法,你的Unicode文本会编码使用UTF-8:

>>> mapper == {'\xd0\x90': 1, '\xd0\x91': 1} 
True 

如果使用第二种方法,您的Unicode文本将被解释为Unicode文本:

>>> mapper == {u'\u0411': 1, u'\u0410': 1} 
True 

请注意,两者是非常不同的。一个是字节串,而另一个表示文本:

>>> {'\xd0\x90': 1, '\xd0\x91': 1} == {u'\u0411': 1, u'\u0410': 1} 
False 

在任一情况下,使用字符转义序列或Unicode文字不会使一个区别,因为它们代表相同的Unicode字符:

>>> u'\u0411' == u'Б' 
True 

#!/usr/local/bin/python 
# coding: utf-8 

from __future__ import unicode_literals 

您可以通过在文件的顶部声明字符编码,并从__future__包导入unicode_literals使Python 2的行为像Python

这将会使你的代码工作同样在这两个的Python 2和Python 3