Python3 字符编码问题

版权声明:本文为博主原创文章,转载请注明出处,谢谢 https://blog.csdn.net/supercooly/article/details/51209143

一、爬虫实例

请求的网页显示的是gb2312编码,但据资料显示,gb2312只能显示简体中文。所以用该编码接收响应时,在转为utf-8编码会报异常,设置为忽略,将丢失繁体字符。
浏览器在解析gb2312编码时,会默认映射到gbk编码,gbk编码时gb2312的超集,包含其所有字符,也包括繁体字符,所以繁体字在浏览器上可以正常显示。
所以,在爬虫中,当见到gb2312时,设置编码为gbk为好。


resp = requests.get(URL, params=params)
resp.encoding = "gb2312"
html = resp.text
# html = html.encode(encoding="gbk", errors="ignore").decode("gbk", errors="ignore")
html = html.encode(encoding="utf-8", errors="ignore").decode("utf-8", errors="ignore")
print(html)

将响应的编码设置为gbk,即使网页使用的是gb2312编码,这样繁体字就不会丢失了。

resp = requests.get(URL, params=params)
    resp.encoding = "gbk"
    # print(resp.content)
    html = resp.text
    # print(html)
    html = html.encode(encoding="utf-8", errors="ignore").decode("utf-8", errors="ignore")
    print(html)

二、Python3 编码

在Python3中取消了unicode类型,字符串类型直接使用了unicode编码,而不是使用python2中的字节码存储

Python2
默认ASCII字符串(字节码) —decode—>不行的,不支持中文。
字符串(unicode)—encode—> 转码后的字节码 —decode—> 转码后的字符串
如果Python2要想想Python3一样的话,那么就需要在声明变量的时候,将 字符串前加上“u”,以显示的使用unicode类型

默认编码:ASCII

>>> s = "中文字符串" # ASCII字符串                                                                                                                                                                                                    
>>> s
'\xd6\xd0\xce\xc4\xd7\xd6\xb7\xfb\xb4\xae'
>>> u = u'中文'                                                                                                                                                                                                         
>>> s1 = u.encode('gb2312') # 以gb2312编码对unicode对像进行编码
>>> s1
'\xd6\xd0\xce\xc4'
>>> u1 = s1.decode('gb2312') # 以gb2312编码对unicode对像进行解码
>>> u1
u'\u4e2d\u6587'
>>> print u1
中文          

Python3
默认字符串(unicode)—encode—> 转码后的字节码 —decode—> 转码后的字符串

>>> s = "中文"  #默认是UTF-8                                                                                                                                                                                                        
>>> gbks = s.encode("gbk") #以gbk重新编码,bytes类型
>>> gbks = gbks.decode("gbk")#以gbk解码,字符串类型
>>> gbks
'中文'                                                                                                                                                                                                                  
>>>

猜你喜欢

转载自blog.csdn.net/supercooly/article/details/51209143
今日推荐