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


问题内容
# -*- 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内部表示形式之间有什么区别?我自己怎么看?:)


问题答案:

字符串中包含Unicode文字

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

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

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

您确实应该阅读Python和Unicode: