雖然這是乙個很基礎的問題,但是博主一直都是瞎貓碰死耗子的心態去試,因為對於中文就那麼幾種encode方式 - -!
編碼解碼
一般來說由一種字串變成二進位制串的過程叫encode;反之稱為decode
通常我們寫乙個文件時,無論是通過word / pycharm / notepad++這些,都會有乙個東西叫解碼方式,出現在右下角,並且選不好就出現亂碼。
why?
首先,我們知道字串存在硬碟中,實際上存放的是二進位制數,那怎麼存放二進位制數,二進位制怎麼對應起我們想要的字元,這就通過了我們規定的編碼規則了。
我們通過輸入法,輸入的字串到硬碟二進位制的過程叫encode;開啟二進位制檔案在編輯器中顯示字元的過程叫decode。這是對於檔案編輯器來說。
python3字元
python3檔案中只有兩種字元str
型和bytes
型
其中bytes
就是二進位制串的十六進製制表示,str
在python3是unicode
標準並且可以選擇不同編碼表示,如utf-
gbk
iso-
等。
可以在python**的首行指定# -*- coding:gbk -*-
,或者在pycharm的右下角選擇
關於unicode
這些,可以看:
其實你把python檔案當成乙個普通的字元檔案就很容易理解上面的東西了。看看python3如何指定解碼方式讀取文件只不過python因為可以呼叫函式實現encode和decode的操作。
特地用gbk
寫了乙個test檔案,只有一行:
i love 中國!**:
# -*- coding:gbk -*-
a ='i love 中國!'
print
(a.encode(
'gbk'))
print
(a.encode(
'utf-8'))
with
open
('test_en_decode'
,'rb'
)as f:
a = f.readlines(
)print
(a)print
(a[0
].decode(
'gbk'
))
結果:
b'i love \xd6\xd0\xb9\xfa!'
b'i love \xe4\xb8\xad\xe5\x9b\xbd!'
[b'i love \xd6\xd0\xb9\xfa!']
i love 中國!
發現gbk
utf-
兩者編碼方式不一樣,得到的二進位制串結果也不一樣。
並且'rb'
方式open最後得到得結果也可以進行對應編碼方式得decode,而不出現亂碼。
至於為什麼python在encode後,英文本元不是二進位制串,應該是編譯器列印時,ascii能對應得就轉換了
.#
Python 3「字串和編碼「
python3 字串是以unicode編碼 字元的表示轉換函式 str變為bytes方法 bytes變為str方法 注意!中文不能轉為ascii編碼 len 函式 儲存源 時,通常要在檔案開頭加上兩行 usr bin env python3 coding utf 8 格式化 小明的成績從去年的72分...
python3 字串編碼相關
編碼型別很多,常見的例如 ascii碼 最早被編入計算機中的,長度是128,主要是為了解決英文本元 gb2312 中國人編碼的,為了解決中文 unicode 統一多種編碼方式,降低亂碼 utf 8 unicode的改進版,節省編碼長度 python3預設編碼方式是 utf 8 編碼方式相互轉換 de...
python3自學筆記3 字串和編碼
摘錄自 廖雪峰python3.5教程 內容 字串和編碼 目錄 一 字元編碼的發展 二 python的字串 正文 一 字元編碼的發展 美國人在發明計算機編碼時只將大小寫英文本母 數字和一些符號共127個字母編碼到計算機中,稱為ascaii編碼。最早的計算機以8個位元為乙個位元組,所以乙個位元組能表示最...