在記憶體中,本來沒有字元的概念,每個位元組都是乙個0-255的數字。我們把數字進行編號,每個數字代表乙個字元。追根溯源,以ascii碼為例。比如65(十進位制)定義為字元'a',66定義為'b',61定義為'='。
這就是編碼。然後才有了char型定義,實際上等同於byte,只是使用char型時就知道要表示的是字元。
如果char ch=65,然後printf("%c",ch),出來就是'a',這就是解碼了。如果printf("%d",ch),那出來就仍是65。
單位元組byte只能支援0-255的編碼,對於亞洲語言,像中文漢字,是完全不夠用的。所以之後有雙位元組(0-65535)以及多位元組編碼的出現。
以雙位元組為例,0-65535並不能同時為多種語言編碼。所以打個比方,同乙個數字,可能在中文gbk編碼時定義為漢字'王',而在日文編碼ms932中就被定義為'小'。
當記憶體中的數字被解釋為字元(文字和符號)時,就是解碼過程,把文字和符號用數字定義時就是編碼。
實際編碼過程中,不少是前後位元組有關聯性定義的,並非我說的那麼簡單。
在網路傳輸時,實際上仍然是單位元組,甚至是位元組中1個bit乙個bit傳輸的。
我們在傳輸時使用byte陣列,即基本型別,而在傳輸前後轉回gbk中文編碼。
以老美的視角來看問題,則從byte變成亞洲語言(gbk/unicode)屬於編碼encoding,而相反過程是解碼decoding。
另外: str.getbyte()方法使用「平台的預設字符集」(例如本機就是gbk)將此
string
編碼為 byte 序列,並將結果儲存到乙個新的 byte 陣列中。
編碼通俗解釋
很久很久以前,有一群人,他們決定用8個可以開合的電晶體來組合成不同的狀態,以表示世界上的萬物。他們看到8個開關狀態是好的,於是他們把這稱為 位元組 再後來,他們又做了一些可以處理這些位元組的機器,機器開動了,可以用位元組來組合出很多狀態,狀態開始變來變去。他們看到這樣是好的,於是它們就這機器稱為 計...
編碼和解碼
str是以位元組表示的文字,unicode是以字元表示的文字。您可以將文字從位元組解碼為unicode,並使用某種編碼將unicode編碼為位元組。即 str str unicode str encode 編碼,程式設計不可識別的unicode decode 解碼,恢復成字串和中文等def test...
編碼和解碼
1 編碼 encode 編碼方式 拿到明文編碼後對應的位元組 ascii 碼 不支援中文,支援英文 數字 字母 符號 gbk 國標 支援中文 支援英文 數字 字母 符號 英文用16位 中文用16位 unicode 萬國碼 支中文 英文 數字 字母 英文32位 中文32位 utf 8 長度可變的萬國碼...