什麼是 Unicode:完整指南、用途和編碼

最後更新: 20月2025
  • Unicode 為每個字元指派一個唯一的代碼點,並將其內容與 ISO/IEC 10646 同步。
  • UTF-8、UTF-16 和 UTF-32 對相同的字元進行編碼並允許無損轉換。
  • 規範化、Bidi 和 UCD 屬性可確保一致的比較、排序和渲染。
  • 採用 Unicode(最好在網路上採用 UTF-8)可防止損壞並促進國際化。

關於 Unicode 的通用說明

Unicode 是電腦處理文字時使用的通用語言:它為幾乎任何書寫系統中的每個字元和符號分配一個唯一的數字,以便可以在平台和國家之間無縫地儲存、處理和共享文字。

這個標準的出現是為了克服舊字元集(ASCII 集、代碼頁、EBCDIC 等)的局限性,這些字元集要么功能不足,要么彼此不相容。如今,該標準與 ISO/IEC 10646 同步,維護演算法(例如雙向演算法),並定義屬性和規範化規則,以確保一切運作一致。

什麼是 Unicode 以及為什麼它如此重要?

Unicode 是一種通用且不斷發展的字元編碼標準,它以名稱、代碼點和一組屬性(腳本、類別、方向性、大小寫等)來描述每個字元。 Unicode聯盟內的 Unicode 技術委員會 (UTC) 負責使其與 ISO/IEC 10646 標準保持同步。

其目標是通用性、統一性和獨特性:一個涵蓋廣泛領域的庫,能夠實現多語言文本的無歧義交換,並遵循清晰且可複現的規則。正因如此,現代科技(作業系統、瀏覽器、XML、Java、資料庫)才能在同一文件中混合使用拉丁字母和阿拉伯字母、中日韓漢字、表情符號以及技術或音樂符號。

字元、字形和代碼點

在Unicode中,字元是資訊的抽象單元,代碼點是它的數值標識符。字形是字元的視覺形式(螢幕上顯示的內容),它取決於字體。一個字元可以有多個字形,有時一個字形也可以代表多個字元。

代碼點的常用表示方法是十六進位的 U+XXXX。分析資料中的一些例子:小寫字母「l」是 U+006C,預組合小寫字母「ü」是 U+00FC,「é」是 U+00E9,希臘字母 beta:大寫為 U+0392,小寫為 U+03B2(在某些文本中,「β」被引用為 U+0392,但「寫字母」。

Unicode 代碼空間有 1.114.112 個可能的位置(最高到 U+10FFFF),其組織方式旨在涵蓋和分類所有書寫系統和符號,每個版本都有數萬個有效且不斷增長的分配。

規劃、區域和街區

Unicode 將其字元空間劃分為 17 個平面,每個平面最多可容納 65.536 個代碼點。這種劃分方式可輕鬆將相關的文字和符號分組,並快速找到所需內容。

最相關的平面:基本多語平面(BMP,平面 0)匯集了幾乎所有現代字母和許多符號;補充多語平面(SMP,平面 1)儲存歷史文字和技術符號(例如,音樂和數學符號);補充表意文字平面(SIP,平面 2)擴展了中日韓表意文字;平面 14(SSP)包含特殊標籤;

區塊和區域:地圖非正式地劃分為區域,正式地劃分為相鄰的區塊。區塊用於統計和記錄字符,儘管它們並不總是與有意義的語言分組相對應。

  科技對比表

CJK 表意文字和 Unihan 項目

東亞(漢字)表意文字在Unicode中統一,雖然因地區而異形,但都指同一個抽象概念。其管理由表意文字報告小組(IRG)負責,該小組是ISO/IEC JTC1/SC2/WG2的成員,成員來自中國、日本、韓國、越南、香港、澳門、新加坡、美國等國家和地區。

Unihan 資料庫匯集了處理不同語言中的這些表意符號以及歷史或企業標準所必需的輔助資訊(發音、含義、等效詞)。

主要中日韓詞彙塊和擴展:

  • 中日韓統一表意文字(BMP,U+4E00–U+9FFF):20.992個常用字元。
  • 擴展 A(BMP,U+3400-U+4DBF):6.592 個較不常見的表意文字。
  • B–H延伸:在 SMP/SIP/TIP中,它們加起來有數萬個(B:U+20000–U+2A6DF,42.720;C:U+2A700–U+2B73F,4.154;D:U+2B740–U+2B81 F,222;E:U+2B820–U+2CEAF,5.762;F:U+2CEB0–U+2EBEF,7.473;G:U+30000–U+3134F,4.939;
  • 其他相關 CJK 區塊:康熙部首(U+2F00–U+2FDF)、CJK符號和標點符號(U+3000–U+303F)、相容性和相容格式、相容性表意文字補充等。

Unicode 預計表意符號的納入不會有絕對的結束,並考慮了諸如表意描述序列之類的機制,透過將未編碼的符號分解為現有組成部分來表示它們(但要注意:沒有規範的分解,也無法保證搜尋或排序等操作的準確性)。

編碼形式:UTF-8、UTF-16 和 UTF-32

Unicode 定義了轉換形式 (UTF),將代碼點轉換為儲存單元,以便軟體能夠根據上下文有效地處理文字。

UTF-8是一種可變長度、面向位元組的編碼格式,它在 U+0000 到 U+007F 的範圍內與 ASCII 相容,每個字元使用一個位元組。目前的標準是每個字元使用 1 到 4 個位元組;一些較早的文獻提到 1 到 6 個位元組,但在現代 Unicode 中是 1 到 4 個位元組。它是網路上的主流編碼格式。

UTF-16使用 16 位元單位

(每個字元一個或兩個代碼單元):大多數 BMP 字元適合一個單元;補充字元使用 U+D800–U+DFFF 範圍內的代理對。

UTF-32是固定長度的編碼:每個字元 4 個位元組,簡單但佔用空間大;當直接字元索引很重要且記憶體不是問題時,它非常有用。

UTF-8 中的位元分佈

UTF-8 格式將代碼點位分成 1 到 4 個位元組的序列,並帶有可識別的頭部,這樣可以避免歧義,並便於檢測字元邊界。

Unicode 範圍 位元模式 字節
U+0000..U+007F 0xxxxxxx 1
U+0080..U+07FF 110yyyyy 10xxxxxx 2
U+0800..U+FFFF 1110zzzz 10yyyyyy 10xxxxxx 3
U+010000..U+10FFFF 11110uuu 10uuuzzzz 10yyyyyy 10xxxxxx 4

UTF-8 的一個主要優點是它避免了字節序(字節序)問題,並允許高效地處理文字流,此外還向後相容於 ASCII。

編碼方案、位元組順序和 BOM

除了 UTF 格式之外,Unicode 還描述了序列化方案,這些方案解決瞭如何在具有不同字節序的系統之間傳輸字節,以及如何指示字節順序等方面的問題。

  • UTF-8的:位元組順序不適用。它可以攜帶 位元組順序標記 (BOM)作為提示,儘管默認情況下它不是必需的或建議的。
  • UTF-16的:BE/LE(大/小端)變體和可選的 BOM(如果缺失且協定未定義,則假定為大端)。
  • UTF-32的:具有類似規則的 BE/LE 變體;允許使用 BOM 作為訂單標記。
  大數據分析:決策變革

此外,還有一些特定的變體,例如 UTF-16BE/UTF-16LE 和 UTF-32BE/UTF-32LE(按照慣例沒有 BOM),以及其他歷史相容編碼,例如 UTF-7 或 UTF-EBCDIC,此外還有 GB18030(相當於 UTF-8 的中文和中文繁體編碼,支援簡體和中文繁體編碼)。

規範化、組合和等價性

許多漢字可以用預組合形式或由基本符號和組合符號組成的序列來表示。修訂資料中的經典例子:預先組合形式的「Ä」是U+00C4,而分解形式是「A」(U+0041)+分音符(U+0308)。越南語「ỗ」可以表示為「o」(U+006F)+抑揚符(U+0302)+波浪號(U+0303)。

Unicode 定義了標準化的字串形式和兩種等效性:規範等效性(內容完全相同)和相容性等效性(形式可能相同但語義不同)。標準化確保了字串比較的可靠性並減少了重複。

雙向演算法和特殊字符

對於從右到左的文字,例如阿拉伯語或希伯來語,Unicode 採用了一種標準化的、不斷發展的雙向演算法(Bidi)(例如,6.3 版本中的修訂),以便將拉丁語和阿拉伯語混合文本以正確的視覺順序表示。

根據接收到的資料,應該了解以下代碼點類別:圖形字元(字母、符號、標記)、格式(影響處理的不可見字元:U+2028 換行符、U+2029 段落符、U+00A0 硬空格)、用於相容性的繼承控制代碼(範圍U+0000–U+001F、U+007F、U+0080–U+009F)、私有用途、保留位置、替代字元(UTF-16 的 U+D800–U+DFFF)和非字元(每個平面中的 U+FFFE、U+FFFF)。

Unicode、ISO/IEC 10646 和其他標準(ASCII、ANSI、代碼頁)

Unicode 與 ISO/IEC 10646 (UCS) 同步,並保留了與先前標準(ASCII、ISO 8859-1、ANSI Z39.64、JIS X 0208、KS X 1001、GB 2312、GB 18030、HKSCS、CNS 11643.

ASCII 與 Unicode:ASCII 是一種 7 位元字元集,包含 128 個字符,足以滿足基本的英語需求,但對於帶有變音符號、表意符號或表情符號的語言來說則不夠用。 Unicode 涵蓋超過 14 萬個字符,而且還在不斷增長,採用 UTF-12 格式的 8/16/32 位元編碼。

ANSI 和代碼頁:「ANSI」通常指的是有限的、彼此不相容的 8 位元 Windows 代碼頁。例如,當執行 OEM-Latin II 的電腦開啟 IBM EBCDIC-Cyrillic 格式的文字時,會顯示錯誤的字元。 Unicode 透過單一字元集及其自身格式之間的無損轉換解決了這個問題。

系統(Windows、Solaris)上的實作與轉換

Windows 內部在其現代 API 中使用 UTF-16 編碼,並提供諸如MultiByteToWideChar和WideCharToMultiByte等功能,用於在 Unicode 和代碼頁(SBCS/DBCS/MBCS)之間進行轉換。如果必須轉換為代碼頁,而該代碼頁無法表示所有字符,則可能會遺失資料。

Windows 上的新應用程式應在內部使用 UTF-16 編碼,並將編碼轉換留給外部處理(例如 I/O 和協定),以最大程度地減少資料損壞。即便如此,Windows 在不可避免的情況下仍會保持與舊程式碼頁的兼容性。

根據修訂後的文檔,Oracle Solaris 11在系統層級支援 Unicode 6.0 和 ISO/IEC 10646:2011,在其參數集中使用 UTF-8 作為預設格式,這樣可以避免位元組順序問題並透明地保留 ASCII。

Unicode 實踐:Web、文件和程式設計

在網路上,通常使用 UTF-8 編碼來提供和儲存內容。在 HTML 中,聲明「<meta charset="UTF-8">」以確保相容性,並在必要時使用十六進位數位實體(例如:歐元符號「&#x20AC;」)。

  電腦科學與程式設計:科技的未來

在 Word 中,您可以透過以下方式輕鬆插入 Unicode 符號:將遊標放在符號上,選擇“插入”>“符號”,或鍵入代碼並按 Alt+X;這將按照標準流程將值轉換為對應的字元。另請參閱用於從鍵盤插入符號的Alt 代碼清單。

在程式語言中:Python 3 中字串已經是 Unicode 編碼;Java 和 C# 中可以使用轉義字元 '\uXXXX';HTML 中可以使用 '&#xXXXX;'。重要的是,編輯、編譯和傳輸過程必須使用相同的編碼,以避免錯誤。

如果整個字串都採用 Unicode 編碼,則複製貼上符號可以正常運作。但如果字串的某些部分使用了不同的編碼,則可能會出現問號、方框或其他奇怪的符號。

字元資料庫(UCD)、屬性和類別

Unicode字元資料庫(UCD)為每個代碼點發布其名稱、類別、腳本、大小寫屬性、方向性以及其他特徵。這些資訊對於渲染引擎和文字處理的正常運作至關重要。

由於這些特性,不同的組件和演算法(如排序、分詞或大小寫轉換)可以對相同的資料表現出一致的行為。

標準的版本和擴展:亮點

Unicode 隨著每個版本的發布而不斷發展,不斷納入新的文字、符號和表情符號。重要的里程碑包括 1991 年發布的 1.0 版本,該版本包含 7.161 個字符,以及隨後的擴展,這些擴展增加了數千個新的符號、表意文字、表情符號和文字。

例如,2022 年,15.0 版本增加了 4.192 個 CJK 表意文字和其他元素,達到約149.186 個字元。

探索 Unicode 表的工具

有一些免費的工具可以用來搜尋和分析字元:Unibook Character Browser、SYMBL 和 Branah.com 可讓您查詢屬性、名稱和字元區塊,使開發人員和內容創作者更容易快速找到他們需要的資訊。

使用案例:地址表單、國際化和業務

允許使用者使用自己的語言和文字輸入位址有助於減少錯誤並改善使用者體驗。此外,Unicode 互通性可防止不同系統之間的轉換問題,從而在整個數位鏈中保持文字完整性。

因此,Unicode 是確保文字在整個數位基礎設施(從網頁表單到資料庫系統和列印文件)中保持最終狀態的基本要素,無論你在同一句話中使用「ñ」、阿拉伯語、中文還是表情符號。

二進位編號
相關文章:
二進制數字:計算機的秘密語言