我對統一碼字符與該字符表示之間的區別有點困惑。兩者有什麼區別:統一碼與統一碼錶示
>>> u'é'
>>> u'\xe9'
此外,我會怎麼能夠去「讀」的unicode(E)和機器的Unicode(\ xe9)之間的背和反覆?我將如何爲以下事情做這件事?
>>> u='bj\\u00f6rk: voltaic'
>>> print u
bj\u00f6rk: voltaic
我對統一碼字符與該字符表示之間的區別有點困惑。兩者有什麼區別:統一碼與統一碼錶示
>>> u'é'
>>> u'\xe9'
此外,我會怎麼能夠去「讀」的unicode(E)和機器的Unicode(\ xe9)之間的背和反覆?我將如何爲以下事情做這件事?
>>> u='bj\\u00f6rk: voltaic'
>>> print u
bj\u00f6rk: voltaic
repr()
只適用於python 2(這顯然是你使用的)。這裏有一個更完整的答案和建議:如果您將使用unicode,請儘可能切換到python 3。當python 3的改進是它存在的主要原因之一時,沒有什麼理由去理解python 2如何處理文本編碼。
什麼是兩者之間的區別:
u'é' u'\xe9'
這些都是指定相同的字符串到Python兩種方式;有是在這兩個字符串的內容沒有區別:
>>> u'é' == u'\xe9'
True
就像使用值62字節是ASCII A
(chr(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
。