編碼入門

什麼是編碼及其工作原理?

計算機不能儲存字母或其他任何東西 - 它儲存位。位可以是 0 或 1(// - 因此這些格式稱為二進位制)。要使用這些位,需要一些規則來將位轉換為某些內容。這些規則稱為編碼,其中 10 位的序列代表某些字元。8 位序列稱為位元組

編碼像表一樣工作,每個字元與特定位元組相關。要以 ASCII 編碼對某些內容進行編碼,應該按照從右到左的條目進行編碼,搜尋與字元相關的位。要將一串位解碼為字元,可以從左到右替換字母位。

位元組可以用不同的格式表示:例如,二進位制的 10011111 是八進位制的 237,十進位制的 159 和十六進位制格式的 9F

不同編碼之間有什麼區別?

第一個字元編碼,如 8 位時代之前的 ASCII,僅使用 8 位中的 7 位 .ASCII 用於編碼英語,所有 26 個字母均為大寫和小寫形式,數字和大量標點符號。ASCII 無法涵蓋所有​​ö-ß-é-å字母的其他歐洲語言 - 因此開發了使用位元組的第 8 位覆蓋另外 128 個字元的編碼。

但是一個位元組不足以表示超過 256 個字元的語言 - 例如中文。使用兩個位元組(16 位)可以編碼 65,536 個不同的值。像 BIG-5 這樣的編碼將一串位元分成 16 位元(2 位元組)的塊來編碼字元。多位元組編碼具有節省空間的優點,但是諸如查詢子字串,比較等操作的缺點都必須在執行此類操作之前將字元解碼為 unicode 程式碼點(儘管有一些快捷方式,但是)。

另一種型別的編碼是每個字元具有可變位元組數 - 例如 UTF 標準。這些標準有一些單位大小, UTF-8 為 8 位,UTF-16 為 16 位,UTF-32 為 32 位。然後標準將一些位定義為標誌:如果它們被設定,則單元序列中的下一個單元將被視為同一字元的一部分。如果它們沒有設定,則該單元僅完全代表一個字元(例如英語僅佔用一個位元組,這就是為什麼 ASCII 編碼完全對映到 UTF-8)。

什麼是 Unicode?

Unicode, 如果是一個巨大的字符集(用一種更容易理解的方式 - 一個表),有 1,114,112 個程式碼點,每個程式碼點代表特定的字母,符號或其他字元。使用 Unicode,你可以編寫一個文件,其中包含理論上人們使用的任何語言。

*Unicode 不是一種編碼 - 它是一組程式碼點。*有幾種方法可以將 Unicode 程式碼點編碼為位 - 例如 UTF-8,-16 和 -32。