目錄python
什麼是字符編碼編輯器
將人類的字符編碼成計算機能識別的數字,這種轉換必須遵循一套固定的標準,該標準無非是人類字符與數字的對應關係。編碼
最先的字符編碼爲ASCII,只規定了英文字母數字和一些特殊字符與數字的對應關係。可是這種編碼只有使用英語的國家纔可使用。可是處理數據時,各個國家有各個國家的語言,因此各個國家都給本身的語言編寫以一套字符編碼。因此中國人規定了本身的標準gb2312編碼,規定了包含中文在內的字符與數字的對應關係;日本人規定了本身的Shift_JIS編碼;韓國人規定了本身的Euc-kr編碼……code
此刻的各類標準都只是規定了本身國家的文字在內的字符跟數字的對應關係,若是單純採用一種國家的編碼格式,那麼其他國家語言的文字在解析時就會出現亂碼。因此能包含全世界的語言Unicode編碼迫切應運而生。orm
此後Unicode編碼方式成爲世界標準。可是用Unicode會比ascii耗費多一倍的空間,在存儲和傳輸上十分的低效。因此又出現了把Unicode編碼轉化爲「可變長編碼」的UTF-8編碼(Unicode Transformation Format-8)。內存
因爲UTF-8只是簡化了代碼的存儲,它並不能與其餘國家硬盤中的代碼進行關係轉換,所以內存中必須使用Unicode的編碼,UTF-8的代碼沒法進行該操做。utf-8
內存中還使用Unicode編碼,是由於歷史遺留問題形成的,可是由於如今寫代碼使用的都是UTF-8代碼,因此之後內存中的代碼都將變成UTF-8代碼,而且之前遺留的各個國家的代碼都將被淘汰,因此將來內存中使用的編碼也將使用UTF-8編碼替代Unicode編碼。ci
python解釋器至關於文本編輯器,把代碼讀入python解釋器(python2默認是ASCII,python3默認UTF-8)unicode
例如it
中文 # gbk編碼的中文加
識別代碼,檢查 python 語法
# coding:gbk # 告訴python解釋器用gbk去完成第一步,讀入字符 中文
產生結果,在終端進行顯示(電腦是什麼編碼,就按照什麼編碼方式顯示)
代碼出了編碼錯誤,首先加 coding:utf-8
終端的特性:電腦是什麼編碼方式,就按照什麼編碼方式顯示信息。
python2有兩種存儲變量的形式
Unicode
按照coding頭
假設python2用utf8存儲 x='中文'
,當 print(x)
的時候,終端接收gbk的變量x,可是Windows終端編碼是UTF-8,會亂碼
假設python2用Unicode存儲,終端接收的是Unicode,Windows終端編碼是能夠是任意編碼方式,因此確定不會亂碼
# coding:gbk lt1 = '中文' # utf存儲的 # lt1 = ['中文'] # []讓他不用終端的編碼轉化,顯示01010101001 print lt1 # ['\xe4\xb8\xad\xe6\x96\x87'] lt2 = u'中文' # u'中文'讓他變成Unicode # 早期用python2定義中文,必須得加上u,讓他變成Unicode存儲 # lt2 = [u'中文'] print lt2 # '中文'
python3只有一種存儲變量的形式:Unicode
python3用unicode存儲,終端接收的是Unicode,Windows終端編碼是能夠是任意編碼方式,因此確定不會亂碼
lt1 = '中文' # == u'中文' print(lt1)