# -*- 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 现在会关注您在源文件顶部指定的编码,并且它decodes将源文件中的字节转换为unicode
基于您指定的编码的对象。
在这两种情况下,您的编辑器都将一系列字节保存到文件中,以便€
字符,UTF-8编码是three字节,以十六进制表示为 E282AC。因此,字节串中的最后一个字节是 AC,即十进制的 172。将最后 3 个字节解码为 UTF-8 后,它们将一起成为 Unicode 代码点 U+20AC,即十进制的 8364。
你确实应该阅读有关 Python 和 Unicode 的内容:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)