[python基礎]關于中文編碼和解碼那點事兒

      網友投稿 902 2025-03-31

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

      常見錯誤1:

      SyntaxError: Non-ASCII character '\xe4' in file C

      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)

      1

      UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)

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

      # coding:utf-8 import requests def print_text(): url = 'http://www.cnblogs.com/' print requests.get(url).text.encode('utf-8') print_text()

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      # coding:utf-8

      import requests

      def print_text():

      url = 'http://www.cnblogs.com/'

      print requests.get(url).text.encode('utf-8')

      print_text()

      首先在文件py文件的頭部加上標識coding:utf-8 ,然后使用encode(‘utf-8’),一般這樣處理,文字都可以正常顯示到我們的控制臺了。那有沒有想過我們為什么要這樣做?如果你不僅是對寫code感興趣,更想了解其中的原因的話,那我們接著往下看

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

      如圖所示,我們所知的英文編碼都是采用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)

      1

      2

      3

      # coding:utf-8

      [python基礎]關于中文編碼和解碼那點事兒

      s = '中文'

      print type(s)

      輸出:

      'str'>

      1

      'str'>

      在看看decode之后的處理方式

      # coding:utf-8 s = '中文'.decode('utf-8') print type(s)

      1

      2

      3

      # coding:utf-8

      s = '中文'.decode('utf-8')

      print type(s)

      輸出:

      'unicode'>

      1

      '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

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:Word2013的文件按鈕包含的選項卡及各自的作用(以下哪一個選項卡是word 2010的標準選項卡)
      下一篇:excel表格怎么制作財務預測模型?
      相關文章
      337P日本欧洲亚洲大胆艺术图| 亚洲成aⅴ人片在线观| 亚洲va久久久久| 亚洲不卡在线观看| 亚洲AV无码乱码在线观看裸奔| 在线亚洲午夜理论AV大片| 亚洲国产成人VA在线观看 | 久久久久亚洲国产AV麻豆 | 国产精品无码亚洲一区二区三区| 亚洲国产精品无码久久九九大片| 亚洲色欲色欲www在线播放| 亚洲人成网站色在线观看| 亚洲第一男人天堂| 亚洲妇女无套内射精| 亚洲AV第一成肉网| 亚洲精品国产高清嫩草影院| 亚洲日本中文字幕一区二区三区| 亚洲欧洲久久久精品| 亚洲黄片手机免费观看| 亚洲日韩精品无码一区二区三区| 国产亚洲精品美女久久久 | 久久水蜜桃亚洲AV无码精品| 亚洲XX00视频| 日韩一卡2卡3卡4卡新区亚洲| 亚洲免费观看视频| 久久精品国产亚洲av日韩| 亚洲卡一卡2卡三卡4麻豆| 7777久久亚洲中文字幕| 色偷偷亚洲第一综合| 久久亚洲欧洲国产综合| 久久久青草青青亚洲国产免观| 亚洲日本va午夜中文字幕一区| 亚洲国产精品成人综合色在线婷婷| 亚洲AV无码久久久久网站蜜桃 | 亚洲一卡一卡二新区无人区| 亚洲av日韩专区在线观看| 亚洲国产一成久久精品国产成人综合| 亚洲一级特黄大片在线观看| 精品亚洲一区二区| 亚洲熟妇无码久久精品| 亚洲一区二区三区丝袜|