Unicode与Unicode表示

时间:2015-04-01 21:34:04

标签: python unicode

我对unicode字符和该字符的表示之间的区别有点困惑。两者有什么区别:

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

此外,我如何能够在'可读'unicode(é)和机器unicode(\ xe9)之间来回移动?我将如何为以下内容执行此操作?

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

2 个答案:

答案 0 :(得分:2)

您想使用repr

print repr(u)
shell中的

print u'é'为您提供str输出,shell中的u'é'会显示repr输出。

str

  

返回一个包含对象的可打印表示的字符串。对于字符串,这将返回字符串本身。与repr(object)的区别在于str(object)并不总是尝试返回eval()可接受的字符串;它的目标是返回一个可打印的字符串。如果没有给出参数,则返回空字符串''。

答案 1 :(得分:0)

repr()只适用于python 2(这显然是你正在使用的)。这里有一个更完整的答案和建议:如果您正在使用unicode,请尽可能切换到python 3. 没有充分理由尝试了解python 2如何处理文本编码,当python 3的改进是它存在的主要原因之一。

  

两者之间的区别是什么:

u'é' 
u'\xe9' 

这两种方法可以为python指定相同的字符串; 这两个字符串的内容没有区别:

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

就像ascii(A ord()`中的值为62的字节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一样(尽管那不太有用)。

当你打印你的字符串时,python会尝试显示它。当你用repr()转换它时,python会显示字符本身或转义表单,具体取决于它是否可以在文字字符串中使用。在python 3中,repr('é')只是'é',因为它可以出现在字符串文字中。要将文本视为一个16位unicode代码点序列,您应该这样做(在python 2或3中工作):

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

这是一个较长的例子(在python 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