继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

Python: 终于解决了编码问题

墨色风雨
关注TA
已关注
手记 173
粉丝 75
获赞 350

我个人喜好的Python编辑器是Ulipad,在解析网页的时候,经常会遇到乱码的问题,虽说Windows下Python处理中文一直有各种问题和各种答案。却不适合我的。

最近搜索下来,终于找到了其中的奥秘。Ulipad的默认编码是cp936,可以用以下办法得知

import localeprint locale.getdefaultlocale()[1]

之前试图用重新设置默认编码的方法,没有解决编码问题:

reload(sys)
sys.setdefaultencoding('utf-8')

必须在得到你的字符串之后,先decode到你的文本编辑器默认编码,再encode到你的设置的系统默认编码

title.decode(sys.getdefaultencoding()).encode(locale.getdefaultlocale()[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编码转换成其他编码的字符串,如str2.encode('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) #用来判断是否为unicode



作者:bluescorpio
链接:https://www.jianshu.com/p/ce118de0c3b6


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP