python中cp936什么意思_Python:终于解决了编码问题
我个⼈喜好的Python编辑器是Ulipad,在解析⽹页的时候,经常会遇到乱码的问题,虽说Windows下Python处理中⽂⼀直有各种问题和各种答案。却不适合我的。
最近搜索下来,终于到了其中的奥秘。Ulipad的默认编码是cp936,可以⽤以下办法得知
import locale
defaultlocale()[1]
之前试图⽤重新设置默认编码的⽅法,没有解决编码问题:
reload(sys)
sys.setdefaultencoding('utf-8')
必须在得到你的字符串之后,先decode到你的⽂本编辑器默认编码,再encode到你的设置的系统默认编码。
title.defaultencoding()).defaultlocale()[1])
为什么Python使⽤过程中会出现各式各样的乱码问题,明明是中⽂字符却显⽰成“\xe4\xb8\xad\xe6\x96\x87”的形式?
字符串在Python内部的表⽰是unicode编码,因此,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode,再从unicode编码(encode)成另⼀种编码。
decode的作⽤是将其他编码的字符串转换成unicode编码,如str1.decode('gb2312'),表⽰将gb2312编码的字符串str1转换成unicode编码。
encode的作⽤是将unicode编码转换成其他编码的字符串,如de('gb2312'),表⽰将unicode编码的字符串str2转换成
gb2312编码。
因此,转码的时候⼀定要先搞明⽩,字符串str是什么编码,然后decode成unicode,然后再encode成其他编码。
代码中字符串的默认编码与代码⽂件本⾝的编码⼀致。
如:s='中⽂'
如果是在utf8的⽂件中,该字符串就是utf8编码,如果是在gb2312的⽂件中,则其编码为gb2312。这种情况下,要进⾏编码转换,都需要先⽤decode⽅法将其转换成unicode编码,再使⽤encode⽅法将其转换成其他编码。通常,在没有指定特定的编码⽅式时,都是使⽤的系统默认编码创建的代码⽂件。
如果字符串是这样定义:s=u'中⽂', 则该字符串的编码就被指定为unicode了,即python的内部编码,⽽与代码⽂件本⾝的编码⽆关。因此,对于这种情况做编码转换,只需要直接使⽤encode⽅法将其转换成指定编码即可。
如果⼀个字符串已经是unicode了,再进⾏解码则将出错,因此通常要对其编码⽅式是否为unicode进⾏判断:
isinstance(s, unicode) #⽤来判断是否为unicodepython代码转换

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。