python基礎 關於中文編碼和解碼那點事兒

2021-09-24 20:37:04 字數 2044 閱讀 2179

我們在用python處理中文的時候,或多或少會遇到這樣一些錯誤

常見錯誤1:

syntaxerror: non-ascii character '

\xe4

'in file c

常見錯誤2:

unicodeencodeerror: '

ascii

' codec can'

t encode characters in position 0-1: ordinal not in range(128)

毫無疑問,我們在用python2.7.x的時候都會遇到這種問題,我們常規的解法又是怎麼樣的呢

#

coding:utf-8

import

requests

defprint_text():

url = '

'print requests.get(url).text.encode('

utf-8')

print_text()

說起字元的編碼與解碼,那就不得不提字符集了

如圖所示,我們所知的英文編碼都是採用ansi編碼,隨著中國的崛起,國家也開始資訊化,但是計算機不認識中國漢字,怎麼辦呢,我們制定自己統一的字符集,這就是gb2312,

後來更新的字符集,gbk,gb18030,big5 ,都是在原來的基礎之上增加一些新的元素的識別,比如一些生僻字,繁體字認識。

這樣一來不是中文一套,英文一套,那後來的一些其它的國家文字不就都不能互相通用了,那乾脆一鍋端,將這些英文,中文,各國的語言文字大一統,unicode就出現了,不僅相容了這些文字,與方便了各國的資訊交流.

在unicode編碼方式下,又存在 utf-8,utf-16,utf-32的編碼方式

通過上面的一些例子,我們可以大致對於編碼和解碼有乙個大概的印象,那接下來我們看看python2.7.x對於編碼是怎麼處理的,還是先上乙個圖

basestring下面有兩個物件,unicode,str 那這兩者的關係是怎麼樣的?

unicode   ==encode==>  str

str         ==decode==>   unicode 

我們先看python的輸出

#

coding:utf-8

s = '中文'

print type(s)

輸出:

'

str'>

在看看decode之後的處理方式

#

coding:utf-8

s = '

中文'.decode('

utf-8')

print type(s)

輸出:

'

unicode

'>

這樣實驗我們可以很直觀的感受到,當我們要輸出乙個中文的時候:我們輸出的是乙個經過unicode原始物件encode後的str,那當我們拿到乙個返回物件,最常見的在爬蟲裡面得到返回字串的時候我們怎麼處理呢?

首先我們要在py檔案頭部宣告處理編碼,因為我們的py檔案預設採用的是ascii編碼,當返回的字串寫回到文件時就與文件編碼相衝突,這裡就會報銷:

#coding:utf-8 

一般我們加上coding:utf-8就夠了,或者coding:gbk也可以

然後對於返回物件我們可以檢視一下型別type(response.text)

如果是unicode ,那這response.text.encode('utf-8')就可以得到我們要的str物件,如果是str,我們可以直接print出來,或者先解碼,在按你需要的方式編碼.

python基礎 中文編碼

python 檔案中如果未指定編碼,在執行過程會出現報錯 python中預設的編碼格式是 ascii 格式,在沒修改編碼格式時無法正確列印漢字,所以在讀取中文時會報錯。解決方法為只要在檔案開頭加入 coding utf 8 或者 coding utf 8 就行了 pycharm 設定步驟 進入 fi...

Python 中文編碼

python 檔案中如果未指定編碼,在執行過程會出現報錯 usr bin python print 你好,世界 以上程式執行輸出結果為 file test.py line 2 syntaxerror non ascii character xe4 in file test.py on line 2,...

Python 中文編碼

在python中如果輸出中文字元 你好,世界 就有可能會碰到中文編碼問題。python 檔案中如果未指定編碼,在執行過程會出現報錯 usr bin python print 你好,世界 以上程式執行輸出結果為 file test.py line 2syntaxerror non ascii char...