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

中文字符集與字符編碼基礎知識:從 ASCII 到 Unicode 完整演進史

     編輯:PHP 綜合知識

核心概念

  • 字符:文字、符號、數字的總稱
  • 字符集:字符的集合 (如 ASCII, GB2312, Unicode)
  • 字符編碼:將字符集映射為位元組序列的規則 (如 UTF-8, GBK)

歷史演進時間軸

1. ASCII (1963/1968 標準化)

  • 7 位元,128 字符 (0-127)
  • 控制字符 (CR, LF, BEL 等) + 可顯示字符 (英數、標點)
  • ISO 646 國際標準
  • 擴展 ASCII:8 位元,256 字符,含表格符、希臘字母、拉丁擴展

2. 國標碼系列 (中國)

標準年份字符數編碼方式說明
GB2312-8019806763雙位元 (EUC-CN)一級漢字 3755 + 二級 3008 + 符號
GBK199521886雙位元,GB2312 超集含繁體、日韓漢字、擴展符號
GB18030-2000200027533單/雙/四位元混合國家強制標準,含少數民族字、CJK 擴展 A
GB18030-2005200570244四位元含 CJK 擴展 B,與 Unicode 基本同步

3. Big5 (繁體中文)

  • 雙位元編碼,通用於台灣、香港
  • Big5-2003 (HKSCS) 擴展香港增補字符集

4. Unicode 萬國碼

  • 目標:為每個字符分配唯一碼位
  • 碼位範圍:U+0000 ~ U+10FFFF (17 個平面)
  • BMP (基本多文種平面) U+0000~U+FFFF 涵蓋絕大多數常用字

Unicode 編碼實現方案

編碼位元特點適用場景
UTF-32固定 32 位直接對應碼位,空間浪費大內部處理、隨機存取
UTF-1616/32 位變長BMP 2 字節,補充平面 4 字節 (代理對)Windows API、Java、JS 內部
UTF-88/16/24/32 位變長ASCII 兼容、無位元組序問題、網頁標準Web、資料庫、檔案儲存、傳輸

UTF-8 編碼規則

U+0000 ~ U+007F     : 0xxxxxxx                    (1 字節,兼容 ASCII)
U+0080 ~ U+07FF     : 110xxxxx 10xxxxxx           (2 字節)
U+0800 ~ U+FFFF     : 1110xxxx 10xxxxxx 10xxxxxx  (3 字節,含中日韓)
U+10000 ~ U+10FFFF  : 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx (4 字節)

PHP 中的編碼處理最佳實踐

  1. 檔案編碼:統一 UTF-8 無 BOM
  2. 資料庫:CHARSET=utf8mb4 (支援 4 字節 Emoji)
  3. HTTP 輸出:header('Content-Type: text/html; charset=utf-8')
  4. 內部處理:PHP 5.6+ default_charset = "UTF-8"
  5. 函數選擇:mb_* 系列處理多位元組字串,避免 strlen/substr 截斷
  6. 轉換:mb_convert_encoding($str, 'UTF-8', 'GBK') 或 iconv()

常見亂碼成因與排查

現象原因解決
UTF-8 資料以 Latin1 顯示確認連線字符集 SET NAMES utf8mb4
鍛/GBK 資料以 UTF-8 顯示正確宣告來源編碼再轉換
????字體缺失字形安裝支援字符的字體
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved