Python3之亂碼\xe6\x97\xa0\xe6\xb3\x95處理方式
查看字符編碼:
import chardet response = chardet.detect(b'\xe5\xbd\x93\xe5\x89\x8d\xe7\x9b\xae\xe5\xbd\x95\xe4\xb8\x8b\xe6\x89\x80\xe6\x9c\x89\xe6\x96\x87\xe4\xbb\xb6\xe5\x90\x8d\xe6\xb1\x87\xe6\x80\xbb\xe5\x88\x97\xe8\xa1\xa8') print(response) {'encoding': 'utf-8', 'confidence': 0.99, 'language': ''}
亂碼字符轉(zhuǎn)換:
response = b'\xe5\xbd\x93\xe5\x89\x8d\xe7\x9b\xae\xe5\xbd\x95\xe4\xb8\x8b\xe6\x89\x80\xe6\x9c\x89\xe6\x96\x87\xe4\xbb\xb6\xe5\x90\x8d\xe6\xb1\x87\xe6\x80\xbb\xe5\x88\x97\xe8\xa1\xa8' print(response.decode('utf8'))
# def decode_char(*args): # response = args[0] # print(response.decode('utf8')) # # c = b'\a8\xe5\x90\xa7\xef\xbc\x81' # # decode_char(c)
補(bǔ)充知識:python3 中怎么把類似這樣的'\xe5\xae\x9d\xe9\xb8\xa1\xe5\xb8\x82'轉(zhuǎn)換成漢字輸出
在編程的過程中遇到了類似的困擾,網(wǎng)上查了很多解決思路,終于算是明白了一些,這里和大家分享 一下。
python3相對于python2最重要的新特性之一就是對字符串(文本)和二進(jìn)制數(shù)據(jù)流做了明確的區(qū)分,文本總是Unicode,由字符類型表示,而二進(jìn)制數(shù)據(jù)則由bytes類型表示,python3不會以任意隱式方式混用字節(jié)型和字符型,也不能拼接字符串和字節(jié)流(python2中可以,會自動進(jìn)行轉(zhuǎn)換),也不能在字節(jié)流中搜索字符串,也不能將字符串傳入?yún)?shù)為字節(jié)流的函數(shù)。
str和bytes類型之間的相互轉(zhuǎn)換
字符串類str有一個encode()方法,它是字符串向比特流的編碼過程。
bytes類則有一個decode()方法,它是比特流向字符串的解碼過程
encode過程
s = '絕地求生' ss = s.encode() print(type(ss)) print(ss)
運行結(jié)果:
decode過程
s = b'\xe7\xbb\x9d\xe5\x9c\xb0\xe6\xb1\x82\xe7\x94\x9f' ss = s.decode() print(type(ss)) print(ss)
運行結(jié)果:
了解過基本的轉(zhuǎn)化過程,下面回到主題,如何將'\xe7\xbb\x9d\xe5\x9c\xb0\xe6\xb1\x82\xe7\x94\x9f'轉(zhuǎn)換成漢字輸出呢?
要解決的問題是將bytes類型的內(nèi)容以漢字的形式輸出,但是該部分內(nèi)容是字符串類型。因此首先需要將該str轉(zhuǎn)換成bytes類型,再decode解碼為str輸出。這里需要用到的方法是encode(‘raw_unicode_escape')。當(dāng)然,也可以使用decode(‘raw_unicode_escape')方法輸出內(nèi)容為bytes形式的字符串
s = '\xe7\xbb\x9d\xe5\x9c\xb0\xe6\xb1\x82\xe7\x94\x9f' ss = s.encode('raw_unicode_escape') print(type(ss)) print(ss) sss = ss.decode() print(sss)
結(jié)果:
方法補(bǔ)充:如果我們直接定義bytes類型的變量,也可以直接使用str(s, ‘utf8')的方式輸出漢字
s = b'\xe7\xbb\x9d\xe5\x9c\xb0\xe6\xb1\x82\xe7\x94\x9f' print(type(s)) print(s) ss = str(s, 'utf8') print(ss)
結(jié)果:
第二種方法可以輸出從網(wǎng)絡(luò)上直接抓取的網(wǎng)頁中包含的中文字符。
我們使用如下代碼,抓取網(wǎng)頁www.baidu.com。
import urllib.request response = urllib.request.urlopen('http://www.baidu.com') html = response.read() print(html)
顯示的結(jié)果中,中文部分會以\xe7\x99\xbe\xe5\xba\xa6\xe4\xb8\x80代替,這里可以使用方法二進(jìn)行轉(zhuǎn)換。
import urllib.request response = urllib.request.urlopen('http://www.baidu.com') html =str(response.read(),'utf-8') print(html)
結(jié)果如下:
以上這篇Python3之亂碼\xe6\x97\xa0\xe6\xb3\x95處理方式就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
SVM算法的理解及其Python實現(xiàn)多分類和二分類問題
這篇文章主要介紹了SVM算法的理解及其Python實現(xiàn)多分類和二分類問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-02-02Python實現(xiàn)利用最大公約數(shù)求三個正整數(shù)的最小公倍數(shù)示例
這篇文章主要介紹了Python實現(xiàn)利用最大公約數(shù)求三個正整數(shù)的最小公倍數(shù),涉及Python數(shù)學(xué)運算相關(guān)操作技巧,需要的朋友可以參考下2017-09-09python Xarray處理設(shè)置二維數(shù)組作為coordinates方式
這篇文章主要介紹了python Xarray處理設(shè)置二維數(shù)組作為coordinates方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-07-07python+selenium實現(xiàn)簡歷自動刷新的示例代碼
這篇文章主要介紹了python+selenium實現(xiàn)簡歷自動刷新的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05