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:
Ned Batchelder的实用Unicode
绝对最低每个软件开发人员绝对必须知道关于Unicode和字符集(没有任何借口!)作者:Joel Spolsky
| 归档时间: |
|
| 查看次数: |
650 次 |
| 最近记录: |