2016-04-30 67 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