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

kis*_*rgy 5 python string unicode python-2.7

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

a = 'éá??úöüó€'
print type(a)    # <type 'str'>
print a          # éá??úöüó€
print ord(a[-1]) # 172
Run Code Online (Sandbox Code Playgroud)

这为什么有效?不应该这个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
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*ers 10

字符串中有unicode文字

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

当您使用a作为字符串前缀时u'',您向python发信号通知您正在创建unicode对象.Python现在关注您在源文件顶部指定的编码,并根据您指定的编码将源文件中的字节解码unicode对象.

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

你真的应该阅读Python和Unicode: