# -*- 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中的内部表示有什么区别?我怎么能亲自看到它? :)
答案 0 :(得分:10)
字符串
中有unicode文字
不,没有。字符串中有字节。 Python只是在您创建文件时将编辑器保存到磁盘的字节。
当您使用u''
为字符串添加前缀时,您向python发出信号,表示您正在创建unicode
对象。 Python现在关注您在源文件顶部指定的编码,并且根据您指定的编码将源文件中的字节解码为unicode
对象。
在这两种情况下,编辑器将一系列字节保存到文件中,对于€
字符,UTF-8编码是三个字节,以十六进制表示为E282AC。字节串中的最后一个字节因此是AC,或者是十进制的172。将最后3个字节解码为UTF-8后,它们一起成为Unicode代码点U + 20AC,即十进制的8364。
你真的应该阅读Python和Unicode: