字符编码,bytes数据类型
Python学习日记-day17
字符编码是个很麻烦的事情,不管是在python还是在其他语言中都需要处理各种编码问题,python2有需要处理编码的需求,在python3中不区分编码,在内存中都是Unicode,就不存在编码问题。
以下例子基于python2:
python2中如程序里有中文需要先定义编码,否则乱码
# _*_ coding:utf-8 _*_
name = "中国"
print name
在不同的编码环境中,如在windows机器上,我的系统CMD编码是GBK,PyCharm编码是UTF-8,同样的代码便会有不同的结果:
name = "中国"
print name.decode("utf-8")
这段代码的意思是将“中国”decode转为了unicode utf-8,这段代码在cmd和pycharm的结果都是一样的,是因为name转为unicode后,显示结果会根据终端屏幕的编码再次进行自动的encode转换,转换为终端的编码,在cmd里会再自动转为cdm的编码GBK进行显示,在PyCharm里转为PyCharm的编码utf-8进行显示,所以看到的结果都是正常显示的“中国”,但如果要进行强转,如下面的代码:
print name.decode("utf-8").encode("GBK")
此代码转为unicode后,又强制的指定了要最终将编码转为了GBK,在cmd中运行没有问题会正常显示,因为cmd编码就是GBK,但是由于PyCharm编码是UTF-8,所以PyCharm中运行会乱码
unicode打印的是字符数,其他打印的是字节数。
bytes数据类型
bytes,字节类型(二进制类型),就是一个8bits的字节,所有的字符要存到内存,硬盘或者网络发送,都是bytes格式。
在python2里,看到的字符串就是bytes,unicode是unicode
在python3里,字符串是unicode,bytes就是bytes
在python3里
所有的字符在内存里都是unicode
解释器读取文件的默认编码是utf-8,但是如果有个文件的编码是gbk,读到内存里还是需要解码
上图关于存硬盘:
python2里,由于str就是bytes 就直接存到硬盘了;
python3里,由于str是unicode,存到硬盘需要明确的指定转为bytes
在python2里encode是转成了指定的编码
在python3里encode会把unicode转成相应编码的同时,把字符变成bytes
共有 0 条评论