Python3中有两种格式:
str:str>>bytes 称为编码(encode)方法有1.re=bytes(“ccc”,“utf8”)2.re=“ccc”.encode(“utf8”)py3中str都是Unicode编码。兼容utf8,三字节表示中文。
bytes:bytes>>str称为解码(decode)方法有1.re = str(“ccc”,“utf8”)2.re=“ccc”.decode(“utf8”)bytes类型有相对应的编码协议。即什么样的编码形式 (如utf8)就仍用什么样的解码。
Python2中也有两种:
str:即原来的3中的bytes s=“曹” 无法print,会报错。即使声明utf8,但是存储方式为bytes。
Unicode:即str u“你好” 表示内容用的Unicode编码。
pyhton3中页面用到utf8,2中用的阿斯克码。
主要问题:
1.如何保存到磁盘的,如何取出来。
在pycharm中,每次写入文件都会自动保存到磁盘中,存入的编码为pycharm默认的编码方式(2中为ascii,3中为utf8)。
所以在pycharm中再运行此文件时,解释器也必须按照存入的编码方式运行。所以我们在文件前两行声明encoding:***。(声明是给解释器看的)
这样运行不出错。同时,声明之后pycharm会锁定右下角编码格式保证两者的 统一性。
2.py3中,字符串的在内存中保存方式都是Unicode。所以在cmd中运行文件后,py3中正常显示,py2中会报错。py的汉字存储的是btyes。
3.涉及到open,下图问题:
上图中的乱码问题
运行文件中用到open时,会调用操作系统打开文件,而win用的是gbk。返回给read后是gbk编码后的格式,所以解释器用的默认utf8无法正确解码。test中是两个字,所以有6个字节的utf8格式的字节码。而gbk两个字节一个字,显示了3个汉字。
解决办法:加个打开时解码方式。
f = open("test","r",encoding='utf8')
print(f.read())
详细:http://www.cnblogs.com/khal-Cgg/p/5948805.html