python3 gb2312转utf8_字符编码和python使用encode,decode转换utf-8, gbk, gb2312
python3 爬取網(wǎng)頁(yè)報(bào)錯(cuò):'gb2312' codec can't decode byte 0xb5 in position 154969: illegal multibyte sequence
方法一:
我一開(kāi)始的想法是獲取網(wǎng)頁(yè)的head標(biāo)簽內(nèi)的meta標(biāo)簽中的charset對(duì)應(yīng)的值。不過(guò)并不是所有的網(wǎng)頁(yè)都存在這個(gè)屬性,因此這個(gè)想法行不通。
方法二:
response內(nèi)有一個(gè)屬性:response.apparent_encoding,可以通過(guò)獲取該屬性獲取requests所認(rèn)為的編碼,然后主動(dòng)對(duì)response.content進(jìn)行解碼,代碼如下:
encoding = response.apparent_encoding
html = response.content.decode(encoding)
又是解碼錯(cuò)誤。在網(wǎng)上翻了翻別人的帖子,其中的一個(gè)解決方法是在decode函數(shù)后加上"ignore"來(lái)忽略那些無(wú)法解碼的文字。
代碼更改如下:
encoding = response.apparent_encoding
html = response.content.decode(encoding, "ignore")
好了,程序不會(huì)報(bào)錯(cuò)了。
雖然解決了一個(gè)問(wèn)題,但是又出現(xiàn)了一個(gè)新的問(wèn)題,那就是對(duì)于生僻字會(huì)發(fā)生亂碼情況,比如“俤”這個(gè)字,在程序中變?yōu)榱薲。。。
究其原因應(yīng)該是gb2312編碼只是包含了常用的中文文字,所以在遇到生僻字會(huì)發(fā)生編碼錯(cuò)誤,那么哪個(gè)編碼是gb2312的超集呢,在網(wǎng)上百度了下為gb18030,那么直接把上面的代碼encoding改為"gb18030"。
gb18030:是新出的國(guó)家標(biāo)準(zhǔn)。這個(gè)標(biāo)準(zhǔn)由國(guó)家強(qiáng)制執(zhí)行(也是為了保證中國(guó)信息業(yè)的地位,以及爭(zhēng)取一定的主動(dòng)權(quán)),所以所有在中國(guó)大陸銷售的操作系統(tǒng)必須支持gb18030。現(xiàn)在的Gb18030不僅包含了簡(jiǎn)體和繁體漢字,支持中國(guó)少數(shù)名族文字,還包含了日韓等國(guó)的象形文字。優(yōu)點(diǎn):兼容性好,與以前的國(guó)標(biāo)碼都兼容。缺點(diǎn):對(duì)英文字母需要2個(gè)字節(jié)的編碼(引用自百度百科)
總結(jié)
以上是生活随笔為你收集整理的python3 gb2312转utf8_字符编码和python使用encode,decode转换utf-8, gbk, gb2312的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: mysql 多维度分表_亿级订单数据分库
- 下一篇: python中递归函数特点,Python