编码解码1.py2编码 srt和Unicode str和Unicode都是basestring的子类。严格意义上说,str实际上是字节串,他是unicode通过编码后的字节组成的序列。 对utf8编码的str‘苑’使用len()函数时,结果是3,由于utf8编码的‘苑’=='\xe8\x8b\x91'。 而unicode是一个字符串,str是unicode这个字符串通过编码(utf8,gbk等)后的字节组成的序列。 unicode才是真正意义上的字符串,对字节串str使用正确的字符编码进行解码后得到,而且len(u'苑')==1 在py2里,str=bytes py2编码的最大特色是Python2将会自动的将bytes数据解码成unicode字符串 因此py2里面能够将字节与字符串拼接 repr()查看存到内存里面的是什么 str里面存的是bytes type()查看类型 变量=u'' 存的unicode类型 py2特色: print 'hello'+u'yuan' bytes类型加unicode类型能够直接跨类型拼接字符串 由于会自动进行类型转换把bytes转换成了unicode 字节串和字符串 UnicodeError。你的代码中包含了unicode和byte字符串,只要数据所有是ASCII的话,全部的转换都是正确的, 一旦一个非ASCII字符偷偷进入你的程序,那么默认的解码将会失败,从而形成UnicodeDecodeError的错误。 python2悄悄掩盖掉了byte到unicode的转换,让程序在处理ASCII的时候更加简单。而付出的代价就是处理非 ASCII的时候将会失败。 在进行表转换的时候要先转换为unicode,而后在转换所须要的表 utf8---》unicode---》gbk 默认ASCII码打印,打印到控制台须要编码2.py3编码 python3中对unicode 支持的最大变化就是就是将会没有对byte字节串的自动解码。若是直接用一个byte字节串和一个 unicode相链接,就会报错,无论内容是什么。 注:python2中有隐式处理,python3中没有 python3中控制台默认utf8编码打印3.常见编码错误:cmd下乱码问题;在IDE下用2和3执行都没问题,在cmd下3正确,2乱码在windows终端下去执行cmd.exe去执行,但cmd.exe自己是一个软件;当咱们pythong2 hello.py时,python2解释器(默认ASCII编码)去按声明的utf8编码文件,而文件又是utf8保存的,因此没问题;问题是出在当print时解释器正常执行,不会报错,可是print的内容会传递给cmd.exe显示,而在py2里面这个内容就是utf8编码的字节数据,而这个软件默认的编码解码方式时GBK,因此cmd.exe用GBK的解码方式去解码utf8就会乱码。py3传递给cmd.exe的是unicode数据,符合ISO统一的标准,因此没问题。