这些字符串在Python解释器中如何表示内部?我不明白

时间:2013-02-12 18:14:11

标签: python string unicode python-2.7

# -*- coding: utf-8 -*-

a = 'éáűőúöüó€'
print type(a)    # <type 'str'>
print a          # éáűőúöüó€
print ord(a[-1]) # 172

为什么这样有效?这不应该是SyntaxError: Non-ASCII character '\xc3' in file ...吗?字符串中有unicode文字。

当我用u作为前缀时,结果会有所不同:

# -*- coding: utf-8 -*-

a = u'éáűőúöüó€'
print type(a)    # <type 'unicode'>
print a          # éáűőúöüó€
print ord(a[-1]) # 8364

为什么呢? python中的内部表示有什么区别?我怎么能亲自看到它? :)

1 个答案:

答案 0 :(得分:10)

  

字符串

中有unicode文字

不,没有。字符串中有字节。 Python只是在您创建文件时将编辑器保存到磁盘的字节。

当您使用u''为字符串添加前缀时,您向python发出信号,表示您正在创建unicode对象。 Python现在关注您在源文件顶部指定的编码,并且根据您指定的编码将源文件中的字节解码为unicode对象。

在这两种情况下,编辑器将一系列字节保存到文件中,对于字符,UTF-8编码是三个字节,以十六进制表示为E282AC。字节串中的最后一个字节因此是AC,或者是十进制的172。将最后3个字节解码为UTF-8后,它们一起成为Unicode代码点U + 20AC,即十进制的8364。

你真的应该阅读Python和Unicode: