python編碼問題之”encode”&”decode”
python
encode
decode
編碼
decode的作用是將其他編碼的字串轉換成unicode編碼,如str1.decode(‘gb2312’),表示將gb2312編碼的字串str1轉換成unicode編碼。
encode的作用是將unicode編碼轉換成其他編碼的字串,如str2.encode(‘gb2312’),表示將unicode編碼的字串str2轉換成gb2312編碼。
當我們想獲取網頁原始碼,並且希望能夠以html字尾或者其他格式儲存檔案的時候,如果不進行編碼,那麼儲存得到的檔案在遇到中文時就會出現異常,不便於我們對資料的處理。
首先說一下使用requests請求得到原始碼的處理辦法。
經過我無數次的實踐,發現通過get請求得到的原始碼都是“byte”型別,所以每當想都過write寫入到檔案中時總是會報錯。如下:
-
#coding=utf-8
-
import requests
-
-
r = requests.get(`http://www.baidu.com`)
-
-
print(type(r.text))
-
with open(`baidu.html`,`w`) as f:
-
f.write(r.text)
輸出結果
-
>>>
-
<class `str`>
-
Traceback (most recent call last):
-
File “C:Users14356_000Desktop est.py”, line 8, in <module>
-
f.write(r.text)
-
UnicodeEncodeError: `gbk` codec can`t encode character `xbb` in position 25364: illegal multibyte sequence
解決辦法:示例程式碼如下
-
-
import requests
-
import chardet
-
-
r = requests.get(`http://www.baidu.com`)
-
content = r.text
-
print(type(content))
-
print(chardet.detect(content.encode(`utf-8`)))
-
with open(`baidu.html`,`w`,encoding=`utf-8`) as f:
-
f.write(content.encode(`utf-8`).decode(`utf-8`))
注意chardet是用來檢視文字編碼型別的,之前想使用下面程式碼直接檢視content的編碼型別,但是報錯。
-
…
-
…
-
print(chardet.detect(content))
-
-
>>>
-
Traceback (most recent call last):
-
File “C:Users14356_000Desktop est.py”, line 8, in <module>
-
print(chardet.detect(content))
-
File “C:Python35libsite-packageschardet\__init__.py”, line 25, in detect
-
raise ValueError(`Expected a bytes object, not a unicode object`)
-
ValueError: Expected a bytes object, not a unicode object
因此需要先通過encode,將content的編碼格式轉化為utf-8才能檢視。。這裡還沒弄清楚為什麼Expected a bytes object, not a unicode object,先放著。
下面說說寫入操作。寫入操作之前需要制定encoding的方式為utf-8,另外f.write()時還得先把content的編碼格式設定成utf-8,然後再通過decode解碼,將utf-8格式解碼成Unicode格式,即python內建的編碼格式,這樣就能正常寫入了,而且中文正常顯示!!!
下面是最上面程式碼的輸出結果。
-
>>>
-
<class `str`>
-
{`encoding`: `utf-8`, `confidence`: 0.99}
-
[Finished in 2.3s]
先寫到這~~~
相關文章
- python編碼問題之——Decode error - output not utf-8PythonError
- 字串的encode與decode解決亂碼問題字串
- python encode和decode的妙用Python
- perl encode,decode
- url編碼和解碼分析URLEncoder.encode和URLDecoder.decode
- Encode and Decode Strings
- python中encode和decode函式說明Python函式
- python str與byte轉換 encode decodePython
- python 中文編碼問題Python
- 轉python編碼問題Python
- Python——UnicodeEncodeError: 'ascii' codec can't encode/decode charactersPythonUnicodeErrorASCII
- Python的中文編碼問題Python
- LeetCode-Encode and Decode StringsLeetCode
- EXT中decode()和encode()方法(轉載)
- python編碼問題在此終結Python
- Python 字元編碼問題和其他一些問題Python字元
- 徹底解決Python編碼問題Python
- json_encode() 不編碼中文JSON
- [CareerCup] 17.10 Encode XML 編碼XMLXML
- 解決python中文編碼錯誤問題Python
- js encode64編碼和解碼程式碼例項JS
- php編碼問題PHP
- 字元編碼問題字元
- python報錯問題解決:'ascii' codec can't encode characterPythonASCII
- 【程式異常記錄】01 --- python編碼問題Python
- Python Extension 編譯問題Python編譯
- Python編解碼問題與文字檔案處理Python
- MySQL 中字元編碼問題MySql字元
- 字元編碼問題記錄字元
- jsp的編碼問題JS
- jdom解析中文編碼問題
- JAVA的中文編碼問題Java
- C++windows編碼問題C++Windows
- 中文被 json_encode 編碼成 unicode 之後如何轉換回中文JSONUnicode
- 簡單加密/解密方法包裝, 含encode(),decode(),md5() (轉)加密解密
- netty系列之:自定義編碼和解碼器要注意的問題Netty
- c#學習之--編寫程式碼相關的問題C#
- PHP JSON_decode 返回為 null 問題PHPJSONNull