python 中文编码乱码问题原理分析及解决思路

1. 为了处理英文字符,产生了ASCII码。

2. 为了处理中文字符,产生了GB2312。

3. 为了处理各国字符,产生了Unicode。

4. 为了提高Unicode存储和传输性能,产生了UTF-8,它是Unicode的一种实现形式。

Python2中默认的字符编码是ASCII码,也就是说Python在处理数据时,只要数据没有指定它的编码类型,Python默认将其当做ASCII码来进行处理。这个问题最直接的表现在当我们编写的python文件中包含有中文字符时,在运行时会提示出错

# -*- coding: utf-8 -*-
这个问题出现的原因是:Python2会将整个python脚本中的内容当做ASCII码去处理,当脚本中出现了中文字符,比如这里的“小明”,我们知道ASCII码是不能够处理中文字符的,所以出现了这个错误。 解决的办法是:在文件头部加入一行编码声明, 如图:
这样,Python在处理这个脚本时,会用UTF-8的编码去处理整个脚本,就能够正确的解析中文字符了。

decode()方法将其他编码字符转化为Unicode编码字符。
encode()方法将Unicode编码字符转化为其他编码字符。

一个Tips:decode()方法与在字符串前加u的方法实现的效果相同比如u’小明’

网页中已经声明了它是一个gb2312的字符编码,而我的系统中默认的字符编码为UTF-8显然,我必须要将title转换为UTF-8的字符。

python中gbk转utf8_Python 处理GBK编码转UTF-8读写乱码问题

老套路,首先获取网页源代码

#-*- coding:utf-8 -*-

import requests

url = 'http://search.51job.com/jobsearch/search_result.php?'

page_req = requests.get(url)

page = page_req.text.encode('utf-8')

print page

结果,中文乱码:



浏览器查看,前程无忧源代码,是GBK编码,好吧,转GBK



非法字符,好吧,高级点,我转GB18030



尼玛,又是一种奇怪的字符,继续整,找网页帖子,大概是说先解码成GBK再转UTF_8 把 page = page_req.text.decode('gbk').encode('utf-8') 改成这样

问题是,Python默认字符是ASCII的,decode('GBK')或decode('GB18030')都不成,非法啊。

后来,去stackoverflow看了看,找到了答案,先编码成iso-8859-1在转GBK,问题完美解决   
page = page_req.text.encode('iso-8859-1').decode('gbk')
————————————————
版权声明:本文为CSDN博主「weixin_40009207」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_40009207/article/details/112032503

您可能还喜欢...

发表回复