2015-04-01 116 views
2

我對統一碼字符與該字符表示之間的區別有點困惑。兩者有什麼區別:統一碼與統一碼錶示

>>> u'é' 
>>> u'\xe9' 

此外,我會怎麼能夠去「讀」的unicode(E)和機器的Unicode(\ xe9)之間的背和反覆?我將如何爲以下事情做這件事?

>>> u='bj\\u00f6rk: voltaic' 
>>> print u 
bj\u00f6rk: voltaic 

回答

2

你想用repr

print repr(u) 

print u'é'在shell給你str輸出,u'é'在shell顯示你repr輸出。

str

返回包含一個對象的一個​​很好的打印表示形式的字符串。對於字符串,這會返回字符串本身。與repr(object)的區別在於str(object)並不總是試圖返回eval()所接受的字符串。其目標是返回一個可打印的字符串。如果沒有給出參數,則返回空字符串''。

0

repr()只適用於python 2(這顯然是你使用的)。這裏有一個更完整的答案和建議:如果您將使用unicode,請儘可能切換到python 3。當python 3的改進是它存在的主要原因之一時,沒有什麼理由去理解python 2如何處理文本編碼。

什麼是兩者之間的區別:

u'é' 
u'\xe9' 

這些都是指定相同的字符串到Python兩種方式;有在這兩個字符串的內容沒有區別:

>>> u'é' == u'\xe9' 
True 

就像使用值62字節是ASCII Achr(62) == "A"), unicode characters have a (usually) 16-bit value that is conventionally written in hexadecimal. For a single-character, you could display this value in decimal with ORD()`(雖然這不是太有用)

當你打印字符串時,python會嘗試顯示它,當你用repr()轉換它時,python會向你顯示字符本身或轉義形式,這取決於它是否可以用在一個文字字符串中。只是'é',因爲它可以出現在字符串文字中。要將您的文本看作一系列16位unicode代碼oints,你應該這樣做(工作在Python 2或3):

>>> text = u'e' 
>>> print(text.encode("raw_unicode_escape")) 
b'\xe9' 

這裏有一個較長的例子(蟒蛇3):

>>> text = "neé" 
>>> repr(text) 
"'neé'" 
>>> text.encode("raw_unicode_escape") 
b'ne\xe9' 
>>> text.encode("utf-8") 
b'ne\xc3\xa9' 

需要注意的是UTF-8編碼é爲兩字節序列。 UTF-8只是一種編碼,這個字符的代碼點是U+00e9