*幾個問題:
1.# coding: utf-8與sys.setdefaultencoding(『utf-8』)的區別?
2.假如檔案頭 沒有#coding: utf-8那麼檔案當前的編碼是什麼?
3.print是相當於讀入麼?print出來的結果的編碼跟什麼有關?
這幾個問題會在看完以下知識後進行解答
一、基本概念:
1.位元組:
2.字元:
乙個字元就是乙個資訊單位,是各種符號和文字的統稱(例如』a』和」漢字」)
3.字符集:
某範圍內字元的集合,不同的字符集規定了字元的個數,比如ascii字符集總共有128個字元
而gb2312字符集定義了7445個字元,包含了絕大部分的漢字字元
4.字元碼:
字符集中每個字元的數字編號,例如ascii字符集用0-127連續的128個數字分別表示128個字元,例如」a」的字元碼編號是65.(字元碼形如01000001)
5.字元編碼(此處編碼為名詞概念):
將字符集中的字元碼對映為位元組流的一種具體實現方案(比如把0100000101000010劃分為01000001.01000010的方案)
字符集與字元編碼有種對應關係,例如ascii字符集對應ascii編碼
6.編碼encode、解碼decode(此處編碼為動詞概念):
通常來說:讀入檔案需要decode一下,寫入檔案需要encode一下
編碼的過程:字元->位元組流(計算機處理的是位元組流不是字元,故而編碼,是以特定的方式把字元變成位元組流)
解碼的過程:位元組流->字元()
二、字元編碼:(按演進順序)
1.ascii碼(->eascii碼)
2.(gb2312碼)gbk碼(收錄了少數民族文字) 是中國人自己創造的,解決了所有漢字的編碼問題
3.unicode編碼它為世界上每一種語言的每乙個字元定義了乙個唯一的字元碼(16進製制數字表示兩位元組或者四位元組編碼)
unicode的侷限:有時候會浪費空間; 在各個編碼規則面前作用像英語
4.utf-8它是unicode的一種實現方式,它是一種變長的字元編碼
三、python中的編碼問題
python的預設編碼是ascii碼
附:切換預設編碼的方法
所以在python2中,源**的檔案必須顯示指定編碼型別,**中出現中文就會報錯
#coding=utf-8
或者是
# -*- coding:utf-8
python2中字串相關的型別有str和unicode兩種型別
str型別的字串的編碼格式可以是ascii、utf-8、gbk等任何一種
str(採用某種編碼的字串)–decode—>unicode串
unicode串–encode—>str(採用某種編碼的字串)
在python2中預設是用ascii碼進行encode,decode操作
假如 s=』你好』
s.decode()
預設為ascii編碼進行解碼,但是ascii字符集中沒有中文符
所以應該s.decode(『utf-8』)
*回答幾個問題:
1.# coding: utf-8與sys.setdefaultencoding(『utf-8』)的區別?
# coding: utf-8是設定檔案的字元的編碼為』utf-8』,假如不這麼設定那py檔案中出現中文ide將無法識別其為什麼字元更加無法對其操作;而sys.setdefaultencoding(『utf-8』)是設定系統的預設編碼方案,即預設以』utf-8』的編碼方案讀入和寫出檔案
2.假如檔案頭 沒有#coding: utf-8那麼檔案當前的編碼是什麼?
ascii編碼方案 因為這是python直譯器預設的;
python內部使用的字串的型別為unicode型別
3.print是相當於讀入麼?print出來的結果的編碼跟什麼有關?
print 也是要將unicode串 encode 成有特定編碼的位元組流,所以與寫入操作的規則類似
假如print的物件是unicode型別即使是中文也不會出現亂碼,因為編譯器會自動對unicode型別進行編碼,
而假如指定了和原型別不同的編碼就會出現亂碼
四、檢驗編碼的工具–chardet
import chardet
chardet.detect(串)
通常只有只有str串可檢測到編碼方案
五、python3
python3 區分了 unicode str 和 byte arrary,並且預設編碼不再是 ascii, 為utf-8
import sys
sys.getdefaultencoding()
# 可檢視python3的預設編碼。
參考: python中的解碼 編碼問題
老話說的好 把別人教明白了,自己才算真明白 所以,文章的口吻和用語都偏介紹或是說教學式,在幫助有相同問題的同學看明白的同時,也使自己真的掌握知識點,特此說明。問題都是人類自己造成的,計算機沒有錯。我們以問題為導向,先從報錯出發。執行過程中我們會遇到各種報錯 比如 於是但是,也是有收穫的,我們發現問題...
編碼解碼問題
在很多時候我們會碰到編碼問題。例如在編寫文字檔案時,我們用到了日文和英文,在編輯器中顯示正常,是因為,記憶體中採取的是unicode編碼,相容所有字元 但是我們儲存文字檔案是確是用了gbk 只支援中文和英文 編碼儲存的,這時候就會出現儲存出錯。解決方法 存檔時,使用與編寫文字檔案相容的編碼進行儲存。...
python 編碼解碼
一種編碼想要轉成另一種編碼,需要先解碼成萬國碼 unicode,然後再從unicode轉成其他編碼。例如gbk格式想要轉成utf 8,需要先按照 gbk 的格式 decode 成 unicode,再從 unicode 格式 encode 成utf 8 python3預設使用utf 8編碼,故不用宣告...