通用字符集

通用字符集（Universal Character Set, UCS）是由ISO制定的ISO 10646（或稱ISO/IEC 10646）標準所定義的標準字符集。

通用字符集又稱Universal Multiple-Octet Coded Character Set，中國大陸譯為通用多八位編碼字符集，台灣譯為廣用多八位元組編碼字元集。

## 概要

通用字符集包括了其他所有字符集。它保證了與其他字符集的雙向兼容，即，如果你將任何文本字符串翻譯到UCS格式，然後再翻譯回原編碼，你不會丟失任何資訊。

UCS包含了已知文字的所有字符。除了拉丁字母、希臘字母、西里爾字母、方體亞拉姆字母、阿拉伯字母、亞美尼亞字母、喬治亞字母，還包括漢字、假名、諺文這樣的方塊文字，UCS還包括大量的圖形、印刷、數學、科學符號。

ISO/IEC 10646定義了一個31位的字符集。

UCS不僅給每個字符分配一個代碼，而且賦予了一個正式的名字。表示一個UCS或Unicode值的十六進位數通常在前面加上「U+」，例如「U+0041」代表字符「A」。

## 與Unicode的版本關係

發布版本｜對應的Unicode版本

ISO/IEC 10646-1:1993｜Unicode 1.1

ISO/IEC 10646-1:1993 及 Amd.1 - 7｜Unicode 2.0

ISO/IEC 10646-1:2000｜Unicode 3.0

ISO/IEC 10646-2:2001｜Unicode 3.1之輔助多文種平面（SMP）

ISO/IEC 10646-1:2000 及 Amd. 1｜Unicode 3.2之基本多文種平面（BMP）

ISO/IEC 10646:2003（-1與-2之合併）｜Unicode 4.0

ISO/IEC 10646:2003 及 Amd. 1｜Unicode 4.1

ISO/IEC 10646:2003 及 Amd. 1 - 2｜Unicode 5.0，除去信德語

ISO/IEC 10646:2003 及 Amd. 1 - 4｜Unicode 5.1

ISO/IEC 10646:2003 及 Amd. 1 - 6｜Unicode 5.2

ISO/IEC 10646:2011｜Unicode 6.0，除去印度盧比符號

ISO/IEC 10646:2012｜Unicode 6.1

ISO/IEC 10646:2012 及 Amd. 1 - 2｜Unicode 7.0，除去俄羅斯盧布符號

ISO/IEC 10646:2014｜（沒有對應的Unicode版本）

ISO/IEC 10646:2014 及 Amd. 1｜Unicode 8.0，除去51個額外字符

ISO/IEC 10646:2014 及 Amd. 1 - 2｜Unicode 9.0，除去273個額外字符

ISO/IEC 10646:2017｜Unicode 10.0，除去344個額外字符

ISO/IEC 10646:2017 及 Amd. 1｜Unicode 11.0，除去117個額外字符

ISO/IEC 10646:2017 及 Amd. 1 - 2｜Unicode 12.0，除去62個額外字符

ISO/IEC 10646:2020｜Unicode 13.0

ISO/IEC 10646:2020 及 Amd. 1｜Unicode 15.0

ISO/IEC 10646:2020 及 Amd. 1 - 2｜Unicode 16.0

## 實現級別

並不是所有的系統都需要支持像組合字符這樣的的先進機制。因此ISO 10646指定了如下三種實現級別：

- 級別1：不支持組合字符和諺文字母字符。
- 級別2：類似於級別1，但在某些文字中，允許一列固定的組合字符，因為如果沒有最起碼的幾個組合字符，UCS就不能完整地表達這些語言。
- 級別3：支持所有的通用字符集字符，如，可以在任意一個字符上加上一個箭頭或一個鼻音化符號.

## Unicode和ISO 10646的關係

歷史上存在兩個獨立的嘗試創立單一字符集的組織，即

- 國際標準化組織（ISO）於1984年創建的ISO/IEC JTC1/SC2/WG2，其含義是International Organization for Standardization / International Electrotechnical Commission, Joint Technical Committee #1 Information Technology, Subcommittee #2 Coded Character Sets, Working Group #2 Multi-octet codes). ISO 10646表示這是ISO 646的擴展。
- 由Xerox、Apple等軟體製造商於1988年組成的統一碼聯盟。

前者開發的ISO/IEC 10646項目，後者開發的統一碼項目。因此最初制定了不同的標準。

1991年前後，兩個項目的參與者都認識到，世界不需要兩個不兼容的字符集。於是，它們開始合併雙方的工作成果，並為創立一個單一編碼表而協同工作。1991年，不包含CJK統一漢字集的Unicode 1.0發布。隨後，CJK統一漢字集的制定於1993年完成，發布了ISO 10646-1:1993，即Unicode 1.1。

從Unicode 2.0開始，Unicode採用了與ISO 10646-1相同的字庫和字碼；ISO也承諾，ISO 10646將不會替超出U+10FFFF的UCS-4編碼賦值，以使得兩者保持一致。兩個項目仍都獨立存在，並獨立地公布各自的標準。但統一碼聯盟和ISO/IEC JTC1/SC2都同意保持兩者標準的碼表兼容，並緊密地共同調整任何未來的擴展。在發布的時候，Unicode一般都會採用有關字碼最常見的字型，但ISO 10646一般都盡可能採用Century字型。

## Unicode和ISO 10646的異同

統一碼聯盟公布的Unicode標準包含了ISO/IEC 10646-1實現級別3的基本多文種平面。在兩個標準裡，所有的字符都在相同的位置並且有相同的名字。

ISO/IEC 10646標準，就像ISO/IEC 8859標準一樣，只不過是一個簡單的字符集表。它定義了一些編碼的別名，指定了一些與標準有關的術語，並包括了規範說明，指定了怎樣使用UCS連接其他ISO標準的實現，比如ISO/IEC 6429和ISO/IEC 2022。還有一些與ISO緊密相關的，比如ISO/IEC 14651是關於UCS字串排序的。

Unicode標準，額外定義了許多與字符有關的語義符號學。Unicode詳細說明了繪製某些語言（如阿拉伯語）表達形式的演算法，處理雙向文字（比如拉丁文和希伯來文的混合文字）的演算法，排序與字串比較所需的演算法，等等。

由於Unicode這一名字比較好記，因而它使用更為廣泛。不過一般認為，用於列印ISO/IEC 10646-1標準的字體在某些方面的質量，要高於Unicode 2.0。

兩者部分樣例字形有顯著的區別。ISO/IEC 10646-1標準同樣使用四種不同的風格變體來顯示錶意文字如中文、日文、韓文（即CJK），但Unicode 2.0的表裡只有中文的變體。甚至存在「Unicode對日本使用者來說不可接受」的不實傳說。

## 常見誤解

### ISO 10646是字形標準

實際上，ISO/IEC 10646處理的是編碼標準，但因為一些資料的混亂，而使人產生誤會。比如一個常見的例子是：香港有研究人員以「ISO10646HK.NET」為網址，公佈一些字形製作和拼音釐定的文件。有些人便因此誤以為ISO/IEC 10646是字形標準。

其實，在漢字文化圈中，各地都有其字形標準，例如香港的標準是《常用字字形表》。而ISO/IEC 10646則是作為一套編碼標準，而不是去處理各地標準的細微差異或釐定標準字形。

### ISO 10646比Unicode更支援某地編碼

在Unicode和ISO/IEC 10646兩個標準中，雖然兩者部分樣例字形有顯著的區別，所有的字元都在相同的位置並且有相同的名字。ISO/IEC 10646-1標準使用四種不同的風格來顯示中（繁、簡）、日、韓文字，但Unicode的表中，只用簡體中文風格來顯示，像「Unicode對日本使用者來說不可接受」的誤解，便由此產生。

其實，上文已說明，ISO/IEC 10646或Unicode都只是編碼標準，並不處理字形風格標準之問題。字形的風格可以透過改變顯示字體來解決。