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