Python字符串编码python
字符串编码的前世此生网络
1. 一个字节由8个bit组成,因此1个字节能表示的最大数为255;编码
2. 计算机是美国人发明的,因此一个字节能够表示全部的字符了,因此ASCII就成为美国人的标准编码;spa
3.可是ASCII编码处理汉字是明显不够的,中文不止255个汉字,因此中国制定GB2312编码,用两个字节表示一个汉字,GB2312还把ASCII包含进去了,同理,日文。韩文等等上百个国家为了解决问题都发展了一套字节的编码,标准就愈来愈多,若是出现多种语言混合现实就必定会乱码;code
4.这时候出现了Unicode编码,将全部的标准统一到了一套编码里面;blog
5.那ASCII编码和Unicode编码之间是如何进行转换的?下面是具体的转换方法:内存
5.1 字母A用ASCII编码表示的十进制是65,二进制即为0100 0001utf-8
5.2 汉字“中”已经超出了ASCII编码的范围,用Unicode编码十进制是20013 二进制是0100 1110 0010 1101ci
5.3 A字母用Unicode编码时只须要在前面补上0 即为0000 0000 0100 0001开发
6.乱码问题解决了,可是同时又出现了一个新的问题,若是所有是英文字母的话,Unicode编码比ASCII编码多消耗一倍的内存,同时网络传输的时候也多消耗一倍的带宽;
7.因此这个时候出现了长度可变化的utf-8的编码。
字符与字节
1byte = 8bit 1KB = 1024 bytes 1MB = 1024KB 1GB = 1024MB 1TB = 1024GB
ASCII编码: 一个英文字母占据一个字节的空间,一个中文字母占据两个字节的空间;
utf-8编码: 一个英文字符等于一个字节,一个中文(含繁体)等于三个字节。中文标点占据三个字节,英文标点占据一个字节;
Unicode编码: 一个英文等于两个字节,一个中文(含繁体)等于两个字节。中文标点占据两个字节,英文标点占据两个字节。
Unicode编码为GB2312编码 utf-8编码 ASCII等编码的一个父级编码,那这些子编码之间子在须要相互转换的时候就须要借助父级编码Unicode。子编码是能够直接转换为父级编码,而后父级编码转换为另外一种类型的子编码。
Python2和Python3字符编码存在的问题
获取默认编码格式:
>>> import sys
>>> sys.getdefaultencoding()
咱们发如今python2中默认的编码格式是 'ascii' 编码,在python3中默认的编码格式为utf-8
第一步:在终端输入python进入python2的开发环境
第二步:s = "中国" # 获取s的值拿到 '\xe4\xb8\xad\xe5\x9b\xbd' 说明此时的ASCII编码没法识别汉字
Python2和Python3字符编码问题的解决方案
import sys
defaultencoding = 'utf-8'
if sys.getdefaultencoding() != defaultencoding: reload(sys) sys.setdefaultencoding(defaultencoding)