Manpages

NAME

UTF-8 - ASCII 兼 容 的 多 字 節 Unicode 編 碼

描 述

The Unicode 字 符 集 使 用 的 是 16 位 ( 雙 字 節 ) 碼 。 最 普 遍 的 Unicode 編 碼 方 法 ( UCS-2) 由 一 個 16 位 雙 字 序 列 組 成 。 這 樣 的 字 符 串 中 包 括 了 的 一 些 如 ’\0’或 ’/’這 樣 的 在 文 件 名 中 或 者 是 在 C 庫 函 數 中 具 有 特 殊 意 義 的 字 符 。 另 外 , 如 果 沒 有 做 重 大 的 修 正 的 話 , 大 部 分 操 作 ASCII 碼 文 件 的 UNIX 工 具 不 能 夠 正 確 識 別 16 位 的 字 符 。 因 此 , UCS-2 對 於 Unicode 的 文 件 名 、 文 本 文 件 、 環 境 變 量 等 等 來 說 並 不 是 一 種 合 適 的 外 部 編 碼 方 式 。 ISO 10646 Universal Character Set (UCS), 是 Unicode 的 超 集 , 甚 至 使 用 了 31 位 編 碼 方 式 , 另 外 還 有 使 用 32 編 碼 的 UCS-4 也 有 同 樣 上 述 的 問 題 。 UCS-4 而 用 UTF-8Unicode UCS 編 碼 就 不 會 存 在 這 樣 的 問 題 。 所 以 , UTF-8 很 明 顯 的 是 在 UNIX 類 操 作 系 統 下 的 Unicode 字 符 集 的 解 決 方 案 。

屬 性

UTF-8 編 碼 具 有 以 下 優 良 屬 性 :

*

UCS 字 符 從 0x00000000 到 0x0000007f ( 傳 統 的 US-ASCII 字 符 ) 簡 單 地 編 碼 爲 字 節 0x00 到 0x7f ( 與 ASCII 碼 兼 容 ) 。 這 意 味 着 只 包 含 7 位 ASCII 字 符 的 文 件 和 字 符 串 在 ASCIIUTF-8. 編 碼 方 式 下 是 完 全 一 樣 的 。

*

所 有 大 於 0x7f 的 UCS 字 符 被 編 碼 成 爲 多 字 節 序 列 。 該 序 列 全 部 是 由 0x80 到 0fd 的 字 符 組 成 , 這 樣 就 不 會 有 標 準 ASCII 字 符 會 被 作 爲 某 個 字 的 一 個 部 分 這 種 現 象 出 現 , 對 於 ’\0’和 ’\[u2019]這 樣 的 特 殊 字 符 來 說 也 就 不 會 有 問 題 了 。

*

保 留 了 UCS-4 字 典 中 的 字 節 串 的 排 列 順 序 。
* 所 有 2^32 次 方 的 UCS 碼 都 能 夠 使 用 UTF-8 來 進 行 編 碼 。
*

0xfe 和 0xff 兩 個 字 符 在 UTF-8 中 不 會 被 用 到 。

* 表 示 非

ASCII 碼 的 UCS 多 字 節 串 的 開 始 字 符 總 是 0xc0 到 0xfd 之 間 的 字

符 , 並 會 指 出 該 串 的 長 度 。 多 字 節 串 的 其 他 字 符 都 是 0x80 到 0xbf 之 間 的 字 符 。 這 使 得 再 同 步 非 常 簡 單 , 並 令 編 碼 是 無 態 的 , 丟 字 節 現 象 也 不 容 易 發 生 。

* 用

UTF-8 編 碼 的 UCS 字 符 可 以 增 加 到 6 個 字 節 的 長 度 。 而 Unicode 只 能 增

加 到 3 個 字 節 長 。 由 於 Linux 只 使 用 16 位 的 UnicodeUCS 的 子 集 。 所 以 在 Linux 下 , UTF-8 多 字 節 串 長 度 最 多 不 會 超 過 三 個 字 節 。

編 碼 方 式

下 面 的 字 節 串 用 來 表 示 一 個 字 符 。 用 什 麼 串 依 照 該 字 符 在 UCS 編 碼 中 的 序 號 來 定 :

0x00000000 - 0x0000007F:

0xxxxxxx

0x00000080 - 0x000007FF:

110xxxxx 10xxxxxx

0x00000800 - 0x0000FFFF:

1110xxxx 10xxxxxx 10xxxxxx

0x00010000 - 0x001FFFFF:

11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

0x00200000 - 0x03FFFFFF:

111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

0x04000000 - 0x7FFFFFFF:

1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 這 裏 xxx 的 位 置 二 進 制 位 形 式 的 字 符 編 碼 填 入 。 只 用 最 短 的 那 個 足 夠 表 達 一 個 字 符 編 碼 數 的 多 字 節 串 。

舉 例 說 明

Unicode 字 符 0xa9 = 1010 1001 (版 權 所 有 的 符 號 ) 在 UTF-8 中 被 編 碼 爲 :

11000010 10101001 = 0xc2 0xa9 字 符 0x2260 = 0010 0010 0110 0000 (“不 等 於 ”符 號 )被 編 碼 爲 :

11100010 10001001 10100000 = 0xe2 0x89 0xa0

遵 循 標 準

ISO 10646, Unicode 1.1, XPG4, Plan 9.

作 者

Markus Kuhn

參 考

unicode(7)

[中 文 版 維 護 人 ]

billpan <billpan [AT] yeah.net>

[中 文 版 最 新 更 新 ]

2000/11/09

《 中 國 linux論 壇 man手 冊 頁 翻 譯 計 劃 》 :

http://cmpp.linuxforum.net

本 頁 面 中 文 版 由 中 文 man 手 冊 頁 計 劃 提 供 。 中 文 man 手 冊 頁 計 劃 : https://github.com/man-pages-zh/manpages-zh