字符串编码详解
字符串编码详解
计算机只能处理数字,文本转换成数字才能处理。
计算机中8个bit作为一个字节byte,所以一个字节最大的表示数字就是255
ASCII码
一个字节表示 --- 美国的标准编码 ---- 最多表示255个字符
中国 GB2312
用两个字节表示一个汉字,把ascii码也包含进去
unicode
全球统一的编码 ,用16,32bit 把 所有的语言都统一到一套编码中
例子:
字母 A -- ASCII 65 uincode 0000 0000 0100 0001 二进制 0100 0001
汉字 中 -- ASCII 已经超出 uinicode 20013 二进制 0100 1110 0010 1101
unicode --- 英文会多一倍的空间,和传输时间
utf-8
可变长 编码 ---utf-8
用于传输和储存(3个字节表示一个中文)
注意 : 在内存计算,编程的时候 --- 定长的 unicode 更好使用
python中获取 默认的解码方式
import sys
sys.getdefaultencoding()
python 2.x 需要在文件上方声明文件的编码方式# -*- coding: utf8 -*-,可以通过str.decode/str.encode处理字符串的文本编码
保证 python 编辑器的编码正确,或使用 u’中文’保证被转换成 unicode 编码,推荐使用
sys.setdefaultencoding('utf-8')来保证我们的编码
python解释器在 运行py文件的时候,遇到(没有指定 decode 方式的情况下) str 会按照 默认的解码方式进行解码;
即 sys.getdefaultencoding()得到的编码方式, 所以py2中的中文会和ascii冲突出错,需要开头指定 解码方式
py2 -- ascii 需要 *coding:utf8* 指明,, 或者u’中文’保证被转换成 unicode 编码
py3 -- utf8
例子:
(1) s = '你好'
r = s.decode('utf-8').encode('gb2312')
print r
报错 SyntaxError: Non-ASCII character '\xe4' in file
(2) # _*_coding:utf-8_*_
s = '你好'
r = s.decode('utf-8').encode('gb2312')
print r
正确
这种问题在py3 中已经不存在
py 2 有str 和 unicode 两种 数据类型,str类型需要 先decode
py 3 只有 unicode,所以可以直接encode
window --- gb2312编码
linux ---- utf8
enocde 之前 要先转换成 unicode
读书使人心眼明亮