我吼叫
mapper = {'А': 1, 'Б': 1}
mapper
或
mapper = {u'А': 1, u'Б': 1}
mapper
А,Б - 俄罗斯人的信件。 我们都有
{u'\u0410': 1, u'\u0411': 1}
Python 2.7
什么是正确的方法?感谢
答案 0 :(得分:2)
如果您使用的是Python 3,则所有三种方法都是相同的。
使用Python 2,事情变得棘手。如果您使用第一种或第二种方法,则必须在文件顶部包含一个编码(在shebang行之后,如果你有一个),否则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
您可以通过在文件顶部声明字符编码并从unicode_literals
包导入__future__
来使Python 2的行为与Python 3类似:
#!/usr/local/bin/python
# coding: utf-8
from __future__ import unicode_literals
这将使您的代码在Python 2和Python 3中的工作方式类似。