關于常用中文編碼--你想知道的都在這了

GBK、GB2312、GB18030、UTF-8、UTF-16與Unicode詳解

一、核心概念與區(qū)別

1. GB2312

  • 定義:中國1980年發(fā)布的簡體中文編碼標準,覆蓋6763個漢字和682個符號,采用雙字節(jié)編碼(首字節(jié)范圍:0xA1-0xF7,次字節(jié):0xA1-0xFE)。
  • 局限:僅支持常用簡體漢字,無法表示繁體字或少數(shù)民族文字。

2. GBK

  • 擴展性:在GB2312基礎上新增約14,000個字符(總計21,000+),支持繁體字、日韓漢字及符號,仍為雙字節(jié)編碼(首字節(jié)擴展至0x81-0xFE)。
  • 應用場景:國內(nèi)傳統(tǒng)系統(tǒng)和Web應用,兼容性優(yōu)于GB2312。

3. GB18030

  • 全面覆蓋:最新國家標準(2022版),支持超70,000字符(含少數(shù)民族文字、古漢字),采用變長編碼(1/2/4字節(jié))。
  • 強制場景:中國政務、金融等領域必須使用,但國際兼容性較差。

4. UTF-8

  • 編碼范圍:覆蓋 Unicode 所有字符(U+0000 至 U+10FFFF),包括全球語言、符號及表情。
  • 存儲方式:變長編碼(1-4 字節(jié)):
    • 1 字節(jié):兼容 ASCII(0x00-0x7F)。
    • 3 字節(jié):中文字符(如“嚴”編碼為 E4B8A5)。
    • 4 字節(jié):Emoji 表情(如 ?? 編碼為 F09F988A)。
  • 應用場景:互聯(lián)網(wǎng)數(shù)據(jù)傳輸、多語言混合文本存儲、現(xiàn)代操作系統(tǒng)默認編碼。

5. UTF-16

  • 編碼規(guī)則:Unicode的定長/變長實現(xiàn)(2或4字節(jié)),存在字節(jié)序問題(需BOM標記區(qū)分大端/小端)。
  • 應用場景:內(nèi)存處理高效(如Java、JavaScript內(nèi)部使用),但不兼容ASCII。

6. Unicode

  • 統(tǒng)一標準:為全球字符分配唯一碼點(如“中”對應U+4E2D),不依賴具體編碼方式。
  • 核心角色:作為編碼轉換的中介層,所有區(qū)域性編碼(如GBK)均需通過Unicode與其他編碼互轉。

7.UTF8MB4(MySQL 擴展版 UTF-8)

  • 編碼范圍:完整支持 Unicode 四字節(jié)字符(如 Emoji、罕見漢字)。
  • 存儲方式:變長編碼(1-4 字節(jié)),與 UTF-8 規(guī)則相同,但 MySQL 中默認 utf8 僅支持最多 3 字節(jié)(即 utf8mb3)。
  • 應用場景:數(shù)據(jù)庫存儲需支持 Emoji 或四字節(jié)字符的場景(如社交媒體、多語言應用)。

8.ASCII(American Standard Code for Information Interchange)

  • 編碼范圍:僅支持 128 個字符,包括英文字母(大小寫)、數(shù)字、標點符號及控制字符(如換行符、制表符等)。
  • 存儲方式:單字節(jié)編碼(7 位有效位,最高位固定為 0)。
  • 應用場景:純英文文本處理,如早期計算機系統(tǒng)、簡單配置文件等。
  • 局限性:無法表示非英語字符(如中文、表情符號等),國際化支持幾乎為零。
  • 兼容性:UTF-8 和 UTF8MB4 完全兼容 ASCII。例如,ASCII 字符 A(十進制 65)在 UTF-8 中仍以單字節(jié) 0x41 存儲。

二、編碼轉換關系

1. 區(qū)域性編碼(GB系列) ? Unicode

  • GB2312/GBK/GB18030需通過映射表轉換為Unicode碼點。例如,“安”的GB2312編碼0xB0B2對應Unicode碼點U+5B89,再通過UTF-8/UTF-16存儲。

2. Unicode ? UTF-8/UTF-16

  • UTF-8:直接按規(guī)則轉換碼點。例如,U+4E2D(中)→ 二進制11100100 10111000 10101101 → 十六進制E4B8AD
  • UTF-16:固定兩字節(jié)或代理對(四字節(jié)),如U+1F600(??)→ 0xD83D 0xDE00。

3. 區(qū)域性編碼 ? UTF-8/UTF-16

  • 必須通過Unicode中轉,無法直接轉換。例如GBK到UTF-8需先轉Unicode碼點,再按UTF-8規(guī)則編碼。

轉換原則:區(qū)域性編碼(GB系列)必須通過Unicode中轉,禁止直接互轉

 graph LR
   GB2312 -->|查表映射| Unicode
   GBK -->|查表映射| Unicode
   GB18030 -->|算法轉換| Unicode
   Unicode -->|編碼規(guī)則| UTF-8
   Unicode -->|編碼規(guī)則| UTF-16

三、核心對比與適用場景

編碼標準 字符覆蓋 存儲效率(中文) 國際兼容性 典型應用場景
GB2312 簡體中文基礎 2字節(jié)/字 傳統(tǒng)中文系統(tǒng)、本地文檔
GBK 擴展中文 2字節(jié)/字 國內(nèi)Web應用、兼容舊系統(tǒng)
GB18030 全字符(含Unicode) 2/4字節(jié)/字 政務、金融、強制標準場景
UTF-8 全球字符 3字節(jié)/字 互聯(lián)網(wǎng)、多語言混合環(huán)境
UTF-16 全球字符 2/4字節(jié)/字 內(nèi)存處理(Java、JavaScript)

四、總結與建議

1、ASCII

  • 適用場景:純英文環(huán)境、低資源消耗場景(如嵌入式系統(tǒng))。
  • 缺點:無法國際化,已逐漸被 UTF-8 替代。

2、UTF-8

  • 通用選擇:覆蓋全球語言,適合網(wǎng)頁、文件存儲及跨平臺應用。
  • 注意事項:需統(tǒng)一前后端編碼設置,避免亂碼。

3、UTF8MB4

  • 數(shù)據(jù)庫必選:需存儲 Emoji 或罕見字符時,MySQL 必須使用 utf8mb4。
  • 性能權衡:存儲空間略增,但現(xiàn)代硬件影響可忽略;索引字段需調整長度(如 varchar(191))。

通過理解編碼的核心差異與轉換邏輯,可高效處理多語言數(shù)據(jù),避免亂碼和存儲異常。如需深入技術細節(jié),可參考國家標準文檔或Unicode官方規(guī)范。

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容