UTF-8
UTF-8(Unicode Transformation Format)作为Unicode的一种实现方式,广泛应用于互联网,它是一种变长的字符编码,可以根据具体情况用1-4个字节来表示一个字符。比如英文字符这些原本就可以用ASCII码表示的字符用UTF-8表示时就只需要一个字节的空间,和ASCII是一样的。对于多字节(n个字节)的字符,第一个字节的前n为都设为1,第n+1位设为0,后面字节的前两位都设为10。剩下的二进制位全部用该字符的UNICODE码填充。
以汉字“好”为例,“好”对应的Unicode是 597D,对应的区间是 0000 0800--0000 FFFF,因此它用UTF-8表示时需要用3个字节来存储,597D 用二进制表示是: 0101100101111101,填充到 1110xxxx 10xxxxxx 10xxxxxx 得到11100101 10100101 10111101,转换成16进制:E5A5BD,因此“好”的Unicode“597D”对应的UTF-8编码是“E5A5BD”。
中文 好 unicode 0101 100101 111101 编码规则 1110xxxx 10xxxxxx 10xxxxxx -------------------------- utf-8 11100101 10100101 10111101 -------------------------- 16进制utf-8 e 5 a 5 b d
Python字符编码
注:以下代码和概念都是基于Python 2.x。
现在总算把理论说完了。再来说说Python中的编码问题。Python的诞生时间比Unicode要早很多,Python的默认编码是ASCII。
>>> import sys
>>> sys.getdefaultencoding()
'ascii'
所以在Python源代码文件中如果不显式地指定编码的话,将出现语法错误
#test.py
print "你好"
上面是test.py脚本,运行 python test.py 就会包如下错误:
File “test.py”, line 1 yntaxError: Non-ASCII character ‘\xe4′ in file test.py on line 1, but
no encoding declared; see http://www.python.org/ ps/pep-0263.html for details
为了在源代码中支持非ASCII字符,必须在源文件的第一行或者第二行显示地指定编码格式:
# coding=utf-8
或者是:
#!/usr/bin/python
# -*- coding: utf-8 -*-
在Python中和字符串相关的数据类型,分别是 str、unicode 两种,他们都是 basestring 的子类,可见str与unicode是两种不同类型的字符串对象。
basestring
/ \
/ \
str unicode
对于同一个汉字“好”,用str表示时,它对应的就是UTF-8编码'\xe5\xa5\xbd',而用 Unicode表示时,它对应的符号就是 u'\u597d',与u"好"是等同的。需要补充一点的是,str类型的字符其具体的编码格式是UTF-8还是GBK,还是其它格式,根据操作系统相关。比如在Windows系统中,cmd命令行中显示的:
# windows终端
>>>&nb
本文来源:不详 作者:佚名