❶ python3.x,提取html文檔中的圖片遇到的問題
沒用過3,不過報錯原因應該是編碼格式沒有設置正確。
你先保存網頁下來,看網頁具體編碼格式是gb還是utf-8,然後decode(xxx)
❷ python 轉碼問題
%e7%8e%8b%e8%90%8c 是unicode編碼
%CD%F5%C3%C8是GBK編碼
pyth默認是unicode編碼
要查對應編碼可以去unicode官網查詢unicode-GBK對應編碼
❸ Python中中文字元串怎麼處理
如果處理的字元串中出現中文表示的字元,要想不出錯,就得轉成unicode編碼了。具體的方法有:
1、decode(),將其他邊編碼的字元串轉換成unicode編碼,如str1.decode('gb2312'),表示將gb2312編碼的字元串str1轉換成unicode編碼;
2、encode(),將unicode編碼轉換成其他編碼的字元串,如str2.encode('gb2312'),表示將unicode編碼的字元串str2轉換成gb2312編碼;
3、unicode(),同decode(),將其他編碼的字元串轉換成unicode編碼,如unicode(str3, 'gb2312'),表示將gb2312編碼的字元串str3轉換成unicode編碼。
轉碼的時候一定要先搞明白字元串str是什麼編碼,然後decode成unicode,最後再encode成其他編碼。
另外,對一個unicode編碼的字元串在進行解碼會出錯,所以在編碼未知的情況下要先判斷其編碼方式是否為unicode,可以用isinstance(str, unicode)。
不僅是中文,以後處理含非ascii編碼的字元串時,都可以遵循以下步驟:
1、確定源字元的編碼格式,假設是utf8;
2、使用unicode()或decode()轉換成unicode編碼,如str1.decode('utf8'),或者unicode(str1, 'utf8');
3、把處理後字元串用encode()編碼成指定格式。
❹ python中如何進行轉碼
In[1]:importHTMLParser
In[2]:
In[2]:defdecodeHtml(input):
...:h=HTMLParser.HTMLParser()
...:s=h.unescape(input)
...:returns
...:
In[3]:decodeHtml('A'OK')
Out[3]:u"A'OK"
In[4]:decodeHtml('A&R')
Out[4]:u'A&R'
In[5]:
如果解決了您的問題請採納!
如果未解決請繼續追問
❺ python中如何將亂碼解碼
中文編碼問題一直是程序員頭疼的問題,而Python2中的字元編碼足矣令新手抓狂。本文將盡量用通俗的語言帶大家徹底的了解字元編碼
以及Python2和3中的各種編碼問題。
一、什麼是字元編碼。
要徹底解決字元編碼的問題就不能不去了解到底什麼是字元編碼。計算機從本質上來說只認識二進制中的0和1,可以說任何數據在計算機
中實際的物理表現形式也就是0和1,如果你將硬碟拆開,你是看不到所謂的數字0和1的,你能看到的只是一塊光滑閃亮的磁碟,如果你
用足夠大的放大鏡你就能看到磁碟的表面有著無數的凹凸不平的元件,凹下去的代表0,突出的代表1,這就是計算機用來表現二進制的方
式。
1.ASCII
現在我們面臨了第一個問題:如何讓人類語言,比如英文被計算機理解?我們以英文為例,英文中有英文字母(大小寫)、標點符號、特
殊符號。如果我們將這些字母與符號給予固定的編號,然後將這些編號轉變為二進制,那麼計算機明顯就能夠正確讀取這些符號,同時通
過這些編號,計算機也能夠將二進制轉化為編號對應的字元再顯示給人類去閱讀。由此產生了我們最熟知的ASCII碼。ASCII 碼使用指定
的7 位或8 位二進制數組合來表示128 或256 種可能的字元。這樣在大部分情況下,英文與二進制的轉換就變得容易多了。
2.GB2312
然而,雖然計算機是美國人發明的,但是全世界的人都在使用計算機。現在出現了另一個問題:如何讓中文被計算機理解?這下麻煩了,
中文不像拉丁語系是由固定的字母排列組成的。ASCII 碼顯然沒辦法解決這個問題,為了解決這個問題中國國家標准總局1980年發布《信
息交換用漢字編碼字元集》提出了GB2312編碼,用於解決漢字處理的問題。1995年又頒布了《漢字編碼擴展規范》(GBK)。GBK與
GB 2312—1980國家標准所對應的內碼標准兼容,同時在字匯一級支持ISO/IEC10646—1和GB 13000—1的全部中、日、韓(CJK)漢
字,共計20902字。這樣我們就解決了計算機處理漢字的問題了。
3.Unicode
現在英文和中文問題被解決了,但新的問題又出現了。全球有那麼多的國家不僅有英文、中文還有阿拉伯語、西班牙語、日語、韓語等
等。難不成每種語言都做一種編碼?基於這種情況一種新的編碼誕生了:Unicode。Unicode又被稱為統一碼、萬國碼;它為每種語言中
的每個字元設定了統一並且唯一的二進制編碼,以滿足跨語言、跨平台進行文本轉換、處理的要求。Unicode支持歐洲、非洲、中東、亞
洲(包括統一標準的東亞象形漢字和韓國表音文字)。這樣不管你使用的是英文或者中文,日語或者韓語,在Unicode編碼中都有收錄,
且對應唯一的二進制編碼。這樣大家都開心了,只要大家都用Unicode編碼,那就不存在這些轉碼的問題了,什麼樣的字元都能夠解析
了。
4.UTF-8
但是,由於Unicode收錄了更多的字元,可想而知它的解析效率相比ASCII碼和GB2312的速度要大大降低,而且由於Unicode通過增加一
個高位元組對ISO Latin-1字元集進行擴展,當這些高位元組位為0時,低位元組就是ISO Latin-1字元。對可以用ASCII表示的字元使用Unicode
並不高效,因為Unicode比ASCII佔用大一倍的空間,而對ASCII來說高位元組的0對他毫無用處。為了解決這個問題,就出現了一些中間格
式的字元集,他們被稱為通用轉換格式,即UTF(Unicode Transformation Format)。而我們最常用的UTF-8就是這些轉換格式中的一
種。在這里我們不去研究UTF-8到底是如何提高效率的,你只需要知道他們之間的關系即可。
總結:
1.為了處理英文字元,產生了ASCII碼。
2.為了處理中文字元,產生了GB2312。
3.為了處理各國字元,產生了Unicode。
4.為了提高Unicode存儲和傳輸性能,產生了UTF-8,它是Unicode的一種實現形式。
❻ Python3 調用 encode 轉碼之後,怎麼再轉回去
轉回去就用 str.decode(chrset)
一點解釋:
python3x中
decode(chrset)解碼函數,得到的都是unicode編碼。
encode(chrset)編碼函數,得到的是chrset對應編碼的。
chrset可以是utf-8,gbk,gb2312等等各種編碼。
❼ 用Python3寫的抓取網頁的程序,總是報錯,幫忙看看 --- 抓取百度沒問題,抓取新浪的時候轉碼總報錯:
雖然沒試,但是新浪是GB2312編碼,你改一下decode參數就可以了
❽ Python文件處理里encoding和encode有事區別,bytes類型是什麼意思
python問題我來回答你。
首先你要知道的是,字元串在Python內部的表示是unicode(統一碼、萬國碼)編碼,很多編程語言都是這么設計的,各個國家通用編碼,因此,在做編碼轉換時,通常需要以unicode作為中間編碼,即先將其他編碼的字元串解碼(decode)成unicode,再從unicode編碼(encode)成另一種編碼。
decode的作用是將其他編碼的字元串轉換成unicode編碼,如str1.decode('gb2312'),表示將gb2312編碼的字元串str1轉換成unicode編碼。
encode的作用是將unicode編碼轉換成其他編碼的字元串,如str2.encode('gb2312'),表示將unicode編碼的字元串str2轉換成gb2312編碼。
因此,轉碼的時候一定要先搞明白,字元串str是什麼編碼,然後decode成unicode,然後再encode成其他編碼。
bytes類型是 Python 3.x版本新增的數據類型,在 Python 2.x 中是不存在的。字元串是以字元為單位進行處理的,bytes類型是以位元組為單位處理的。
bytes 只負責以位元組序列的形式(二進制形式)來存儲數據,至於這些數據到底表示什麼內容(字元串、數字、圖片、音頻等),完全由程序的解析方式決定。
說白了,bytes 只是簡單地記錄內存中的原始數據,至於如何使用這些數據,bytes 並不在意,你想怎麼使用就怎麼使用,bytes 並不約束你的行為。
bytes 類型的數據非常適合在互聯網上傳輸,可以用於網路通信編程;bytes 也可以用來存儲圖片、音頻、視頻等二進制格式的文件。
舉個例子:
b = b'' # 創建一個空的bytes
b = byte() # 創建一個空的bytes
b = b'hello' # 直接指定這個hello是bytes類型
b = bytes('string',encoding='編碼類型') #利用內置bytes方法,將字元串轉換為指定編碼的bytes
b = str.encode('編碼類型') # 利用字元串的encode方法編碼成bytes,默認為utf-8類型
bytes.decode('編碼類型'):將bytes對象解碼成字元串,默認使用utf-8進行解碼。
❾ python軟文格式轉換問題
python經常有一些編碼格式的問題西面有幾種轉碼的方式:
unicodestring = u"Hello world"
# 將Unicode轉化為普通Python字元串:"encode"
utf8string = unicodestring.encode("utf-8")
asciistring = unicodestring.encode("ascii")
isostring = unicodestring.encode("ISO-8859-1")
utf16string = unicodestring.encode("utf-16")
# 將普通Python字元串轉化為Unicode:"decode"
plainstring1 = unicode(utf8string, "utf-8")
plainstring2 = unicode(asciistring, "ascii")
plainstring3 = unicode(isostring, "ISO-8859-1")
plainstring4 = unicode(utf16string, "utf-16")
assert plainstring1 == plainstring2 == plainstring3 == plainstring4
❿ python3中為什麼在print之前要將utf8解碼成unicode
因為data是bypes類型的數據,需要轉碼成字元串啊。decode是解碼的意思,utf8是按照什麼格式來解碼,也就是說把二進制的data轉碼成utf8的字元串。
不轉碼直接列印出來的是bytes的。字元串前面有個b的。