首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

計算機編碼表容量計算原理:為什麼 Unicode (UCS-2) 只能收錄 65535 個字符?

     編輯:程式設計綜合問答

問題拆解

題目核心:兩個字節(16 位)能表示多少個不同值?

數學推導

1 Byte = 8 bit
2 Byte = 16 bit
可表示的不同組合數 = 2^16 = 65,536
編碼範圍:0x0000 ~ 0xFFFF(十進制 0 ~ 65,535)

關鍵知識點

概念說明
碼位字符集中每個字符對應的整數編號
代碼單元編碼方案中最小存儲單元(UTF-16 為 16 位)
BMP (基本多語言平面)U+0000 ~ U+FFFF,共 65,536 個碼位
增補平面U+10000 ~ U+10FFFF,需 UTF-16 代理對或 UTF-8 4 字節表示

常見誤區澄清

❌ 「計算機 32 位,內存 4 GB,所以 Unicode 只有 65535」
✅ 兩者無直接因果關係。Unicode 編碼空間大小由編碼方案位寬決定,而非 CPU 位寬或物理內存。

擴展:現代 Unicode 如何突破 65535 限制?

  • UTF-16 代理對:高代理 (U+D800~U+DBFF) + 低代理 (U+DC00~U+DFFF) 組合表示增補平面字符(如 Emoji 😀 U+1F600)
  • UTF-8 變長編碼:ASCII 1 字節,BMP 3 字節,增補平面 4 字節,兼容性最好,已成 Web 事實標準
  • UTF-32 定長 4 字節:直接覆蓋所有 1,114,112 個碼位,隨機訪問快但空間浪費大

實戰驗證代碼

// Java
System.out.println(Character.MAX_VALUE);        // 65535 (char 範圍)
System.out.println(Character.MAX_CODE_POINT);   // 1114111 (實際碼位上限)

// Python
print(sys.maxunicode)  // 1114111 (窄構建為 65535,寬構建為 1114111)

總結

「萬國碼兩字節只能收錄 65535」本質是 16 位無符號整數範圍 的直接體現。現代系統普遍採用 UTF-8/UTF-16 代理對突破此限制,開發時務必區分 char/code unit 與 code point/rune,避免截斷增補平面字符導致亂碼。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved