UTF-8 (8-bit Unicode Transformation Format )是 ぜ 一 いち 種 しゅ 針 はり 對 たい Unicode 的 てき 可變長 かへんちょう 度 ど 字 じ 元 もと 編 へん 碼 ,也是一 いち 种前 ぜん 缀码 。它可以用一至四个字节对Unicode字 じ 符 ふ 集中 しゅうちゅう 的 てき 所有 しょゆう 有效 ゆうこう 编码点 てん 进行编码,属 ぞく 于Unicode 标准的 てき 一 いち 部分 ぶぶん ,最初 さいしょ 由 ゆかり 肯·汤普逊 和 わ 罗布·派 は 克 かつ 提出 ていしゅつ 。[ 2] [ 3] 由 よし 于较小 しょう 值的编码点 てん 一般使用频率较高,直接 ちょくせつ 使用 しよう Unicode编码效率 こうりつ 低下 ていか ,大量 たいりょう 浪 なみ 费内存 そん 空 そら 间。UTF-8就是为了解 りょうかい 决向后 きさき 兼 けん 容 よう ASCII码而设计,Unicode中前 ちゅうぜん 128个字符 ふ ,使用 しよう 与 あずか ASCII码相同 どう 的 てき 二进制值的单个字 じ 节 进行编码,而且字面 じめん 与 あずか ASCII码的字面 じめん 一 いち 一 いち 对应,這使得 とく 原 ばら 來 らい 處理 しょり ASCII字 じ 元 もと 的 てき 軟體 無 む 須或只 ただ 須做少 しょう 部 ぶ 份修改 あらため ,即 そく 可 か 繼續 けいぞく 使用 しよう 。因 よし 此,它逐漸 やや 成 なり 為 ため 電子 でんし 郵件 、網 あみ 頁 ぺーじ 及其他 ほか 儲 もうか 存 そん 或 ある 傳送 でんそう 文字 もじ 優先 ゆうせん 採用 さいよう 的 てき 編 へん 碼方式 しき 。
顯示 けんじ 了 りょう 谷 たに 歌 か 所 しょ 記錄 きろく 的 てき 2001年 ねん 至 いたり 2012年 ねん 主要 しゅよう 編 へん 碼方法的 ほうてき 使用 しよう 情況 じょうきょう ,[ 1] 2008年 ねん ,UTF-8的 てき 使用 しよう 率 りつ 超 ちょう 过所有 しょゆう 其他编码方式 ほうしき ,在 ざい 2012年 ねん 超 ちょう 过所有 しょゆう 网页的 てき 60%。其中ASCII only 曲 きょく 线包括 ほうかつ 所有 しょゆう 仅包含 ほうがん ASCII字 じ 符 ふ 的 てき 网页,无论元 もと 数 すう 据 すえ 中 ちゅう 声明 せいめい 如何 いか 。
自 じ 2009年 ねん 以来 いらい ,UTF-8一 いち 直 ちょく 是 ぜ 万 まん 维网的 てき 最 さい 主要 しゅよう 的 てき 编码形式 けいしき (对所有 しょゆう ,而不仅是Unicode范围内 ない 的 てき 编码)(并由WHATWG宣布 せんぷ 为强制 きょうせい 性 せい 的 てき “适用于所有 しょゆう 事物 じぶつ (for all things )”,[ 4] 截止到 いた 2019年 ねん 11月, 在 ざい 所有 しょゆう 网页中 ちゅう ,UTF-8编码应用率 りつ 高 だか 达94.3%(其中一 いち 些仅是 ぜ ASCII编码,因 いん 为它是 ぜ UTF-8的 てき 子 こ 集 しゅう ),而在排 はい 名 めい 最高 さいこう 的 てき 1000个网页中占 うらない 96%。[ 5] 第 だい 二热门的多字节编码方式Shift JIS和 わ GB 2312分 ふん 别具有 ぐゆう 0.3%和 わ 0.2%的 てき 占有 せんゆう 率 りつ 。[ 6] [ 7] [ 1] Internet邮件联盟( Internet Mail Consortium, IMC )建 たて 议所有 しょゆう 电子邮件程 ほど 序 じょ 都 と 能 のう 够使用 しよう UTF-8展示 てんじ 和 わ 创建邮件,[ 8] W3C建 けん 议UTF-8作 さく 为XML文 ぶん 件 けん 和 わ HTML文 ぶん 件 けん 的 てき 默 だま 认编码方式 しき 。[ 9] 網 あみ 際 ぎわ 網 もう 路 ろ 工程 こうてい 工作 こうさく 小 しょう 組 ぐみ (IETF)要求 ようきゅう 所有 しょゆう 網 あみ 際 ぎわ 網 もう 路 ろ 協議 きょうぎ 都 と 必須 ひっす 支持 しじ UTF-8編 へん 碼[ 10] 。互聯網 もう 郵件聯盟 れんめい (IMC)建議 けんぎ 所有 しょゆう 電子 でんし 郵件軟件都 と 支持 しじ UTF-8編 へん 碼。[ 11]
1992年初 ねんしょ ,為 ため 建立 こんりゅう 良好 りょうこう 的 てき 位 い 元 もと 組 ぐみ 串 くし 編 へん 碼系統 けいとう 以供多 おお 位 い 元 もと 組 ぐみ 字 じ 元 もと 集 しゅう 使用 しよう ,開始 かいし 了 りょう 一 いち 個 こ 正式 せいしき 的 てき 研究 けんきゅう 。ISO/IEC 10646 的 てき 初稿 しょこう 中有 ちゅうう 一 いち 個 こ 非 ひ 必須 ひっす 的 てき 附錄 ふろく ,名 めい 為 ため UTF。當 とう 中 ちゅう 包含 ほうがん 了 りょう 一 いち 個 こ 供 きょう 32位 い 元 もと 的 てき 字 じ 元 もと 使用 しよう 的 てき 位 い 元 もと 組 くみ 串 くし 編 へん 碼系統 けいとう 。這個編 へん 碼方式 しき 的 てき 性能 せいのう 並 なみ 不 ふ 令 れい 人 じん 滿 まん 意 い ,但 ただし 它提出 ていしゅつ 了 りょう 將 しょう 0-127的 てき 範圍 はんい 保留 ほりゅう 給 きゅう ASCII以相容 よう 舊 きゅう 系統 けいとう 的 てき 概念 がいねん 。
1992年 ねん 7月 がつ ,X/Open 委員 いいん 會 かい XoJIG開始 かいし 尋 ひろ 求 もとめ 一個較佳的編碼系統。Unix系統 けいとう 實驗 じっけん 室 しつ (USL)的 てき Dave Prosser為 ため 此提出 ていしゅつ 了 りょう 一 いち 個 こ 編 へん 碼系統 けいとう 的 てき 建議 けんぎ 。它具備 ぐび 可 か 更 さら 快速 かいそく 實 み 作 さく 的 てき 特性 とくせい ,並 なみ 引入一項新的改進。其中,7位 い 元 もと 的 てき ASCII 符號 ふごう 只 ただ 代表 だいひょう 原 ばら 來 らい 的 てき 意思 いし ,所有 しょゆう 多 た 位 い 元 もと 組 ぐみ 序列 じょれつ 則 そく 會 かい 包含 ほうがん 第 だい 8位 い 元 もと 的 てき 符號 ふごう ,也就是 ぜ 所謂 いわゆる 的 てき 最高 さいこう 有效 ゆうこう 位 い 元 もと 。
1992年 ねん 8月 がつ ,這個建議 けんぎ 由 よし IBM X/Open 的 てき 代表 だいひょう 流傳 りゅうでん 到 いた 一 いち 些感興趣 きょうしゅ 的 てき 團體 だんたい 。與 あずか 此同時 じ ,貝 かい 爾 なんじ 實驗 じっけん 室 しつ 九 きゅう 號 ごう 計畫 けいかく 作業 さぎょう 系統 けいとう 工作 こうさく 小 しょう 組 ぐみ 的 てき 肯·汤普逊 對 たい 這編碼系統 けいとう 作出 さくしゅつ 重大 じゅうだい 的 てき 修 おさむ 改 あらため ,讓 ゆずる 編 へん 碼可以自我 わが 同 どう 步 ふ ,使 つかい 得 とく 不 ふ 必從字 じ 串 くし 的 てき 開 ひらき 首 くび 讀取 よみと ,也能找出字 じ 符 ふ 間 あいだ 的 てき 分界 ぶんかい 。1992年 ねん 9月 がつ 2日 にち ,肯·汤普逊 和 わ 羅 ら 勃·派 は 克 かつ 一起 かずき 在 ざい 美國 びくに 新澤 にいざわ 西 にし 州 しゅう 一架餐車的餐桌墊上描繪出此設計的要點。接 せっ 下 か 來 らい 的 てき 日子 にっし ,Pike及汤普 ひろし 逊將它實現 じつげん ,並 なみ 將 はた 這編碼系統 けいとう 完全 かんぜん 應用 おうよう 在 ざい 九 きゅう 號 ごう 計畫 けいかく 當 とう 中 なか ,及後他 た 將 しょう 有 ゆう 關 せき 成果 せいか 回 かい 饋X/Open。
1993年 ねん 1月 がつ 25-29日 にち 的 てき 在 ざい 聖地 せいち 牙 きば 哥 舉行的 てき USENIX 會議 かいぎ 首 くび 次 じ 正式 せいしき 介 かい 紹UTF-8。
自 じ 1996年 ねん 起 おこり ,微 ほろ 軟的 てき CAB (MS Cabinet)規格 きかく 在 ざい UTF-8標準 ひょうじゅん 正式 せいしき 落實前 ぜん 就明確 かく 容 よう 許 もと 在任 ざいにん 何 なん 地方 ちほう 使用 しよう UTF-8編 へん 碼系統 けいとう 。但 ただし 有 ゆう 關 せき 的 てき 編 へん 碼器實際 じっさい 上 じょう 從來 じゅうらい 沒 ぼつ 有 ゆう 實 み 作 さく 這方面 ほうめん 的 てき 規格 きかく 。
UTF-8使用 しよう 一 いち 至 いたり 六 ろく 個 こ 位 い 元 もと 組 ぐみ 為 ため 每 ごと 個 こ 字 じ 符 ふ 編 へん 碼(儘管如此,2003年 ねん 11月 がつ UTF-8被 ひ RFC 3629重 じゅう 新規 しんき 範 はん ,只 ただ 能 のう 使用 しよう 原 ばら 来 らい Unicode定義 ていぎ 的 てき 區域 くいき ,U+0000到 いた U+10FFFF,也就是 ぜ 說 せつ 最多 さいた 四 よん 個 こ 字 じ 節 ぶし ):
128個 こ US-ASCII字 じ 符 ふ 只 ただ 需一個位元組編碼(Unicode範圍 はんい 由 よし U+0000至 いたり U+007F)。
帶 おび 有 ゆう 附加 ふか 符号 ふごう 的 てき 拉 ひしげ 丁 ちょう 文 あや 、希 まれ 臘文 、西里 にしざと 爾 なんじ 字母 じぼ 、亞美 あみ 尼 あま 亞 あ 語 ご 、希 まれ 伯 はく 來 らい 文 ぶん 、阿 おもね 拉 ひしげ 伯 はく 文 ぶん 、敘利亞 あ 文 ぶん 及它拿字母 じぼ 則 のり 需要 じゅよう 兩個 りゃんこ 位 い 元 もと 組 くみ 編 へん 碼(Unicode範圍 はんい 由 よし U+0080至 いたり U+07FF)。
其他基本 きほん 多 た 文 ぶん 種 しゅ 平面 へいめん (BMP)中 ちゅう 的 てき 字 じ 元 もと (這包含 ほうがん 了 りょう 大 だい 部分 ぶぶん 常用 じょうよう 字 じ ,如大部分 ぶぶん 的 てき 漢字 かんじ )使用 しよう 三個位元組編碼(Unicode範圍 はんい 由 よし U+0800至 いたり U+FFFF)。
其他極少 きょくしょう 使用 しよう 的 てき Unicode 輔助平面 へいめん 的 てき 字 じ 元 もと 使用 しよう 四至六位元組編碼(Unicode範圍 はんい 由 よし U+10000至 いたり U+1FFFFF使用 しよう 四 よん 字 じ 節 ぶし ,Unicode範圍 はんい 由 よし U+200000至 いたり U+3FFFFFF使用 しよう 五 ご 字 じ 節 ぶし ,Unicode範圍 はんい 由 よし U+4000000至 いたり U+7FFFFFFF使用 しよう 六 ろく 字 じ 節 ぶし )。
對 たい 上述 じょうじゅつ 提 ひさげ 及的第 だい 四 よん 種 しゅ 字 じ 元 もと 而言,UTF-8使用 しよう 四至六個位元組來編碼似乎太耗費資源了。但 ただし UTF-8對 たい 所有 しょゆう 常用 じょうよう 的 てき 字 じ 元 もと 都 と 可 か 以用三 さん 個 こ 位 い 元 もと 組 くみ 表示 ひょうじ ,而且它的另一 いち 種 しゅ 選擇 せんたく ,UTF-16編 へん 碼 ,對 たい 前述 ぜんじゅつ 的 てき 第 だい 四種字符同樣需要四個位元組來編碼,所以 ゆえん 要 よう 決定 けってい UTF-8或 ある UTF-16哪種編 へん 碼比較 ひかく 有效 ゆうこう 率 りつ ,還 かえ 要 よう 視 み 所 しょ 使用 しよう 的 てき 字 じ 元 もと 的 てき 分 ぶん 佈範圍 はんい 而定。不 ふ 過 か ,如果使用 しよう 一些傳統的壓縮系統,比 ひ 如DEFLATE ,則 のり 這些不同 ふどう 編 へん 碼系統 けいとう 間 あいだ 的 てき 的 てき 差異 さい 就變得 とく 微 ほろ 不足 ふそく 道 どう 了 りょう 。若 わか 顧及傳統 でんとう 壓縮 あっしゅく 算法 さんぽう 在 ざい 壓縮 あっしゅく 較短文字 もじ 上 じょう 的 てき 效果 こうか 不 ふ 大 だい ,可 か 以考慮 こうりょ 使用 しよう Unicode標準 ひょうじゅん 壓縮 あっしゅく 格式 かくしき (SCSU)。
Unicode與 あずか UTF-8的 てき 轉換 てんかん
目前 もくぜん 有 ゆう 好 こう 幾 いく 份關於UTF-8詳細 しょうさい 規格 きかく 的 てき 文 ぶん 件 けん ,但 ただし 這些文 ぶん 件 けん 在 ざい 定義 ていぎ 上 じょう 有 ゆう 些許的 てき 不同 ふどう :
RFC 3629 / STD 63(2003),這份文 ぶん 件 けん 制定 せいてい 了 りょう UTF-8是 ぜ 標準 ひょうじゅん 的 てき 網 あみ 際 ぎわ 網 もう 路 ろ 協議 きょうぎ 元素 げんそ
第 だい 四 よん 版 はん ,The Unicode Standard ,§3.9-§3.10(2003)
ISO/IEC 10646-1:2000附加 ふか 文 ぶん 件 けん D(2000)
它們取代 だい 了 りょう 以下 いか 那 な 些被淘汰 とうた 的 てき 定義 ていぎ :
ISO/IEC 10646-1:1993修正 しゅうせい 案 あん 2/附加 ふか 文 ぶん 件 けん R(1996)
第 だい 二 に 版 はん ,The Unicode Standard ,附錄 ふろく A(1996)
RFC 2044 (1996)
RFC 2279 (1998)
第 だい 三 さん 版 はん ,The Unicode Standard ,§2.3(2000)及勘誤 あやま 表 ひょう #1:UTF-8 Shortest Form(2000)
Unicode Standard附加 ふか 文 ぶん 件 けん #27: Unicode 3.1 (2001)
事實 じじつ 上 じょう ,所有 しょゆう 定義 ていぎ 的 てき 基本 きほん 原理 げんり 都 と 是 ぜ 相 しょう 同 どう 的 てき ,它們之 の 間 あいだ 最 さい 主要 しゅよう 的 てき 不同 ふどう 是 ぜ 支持 しじ 的 てき 字 じ 元 もと 範圍 はんい 及無效 むこう 輸入 ゆにゅう 的 てき 處理 しょり 方法 ほうほう 。
Unicode字 じ 元 もと 的 てき 位 い 元 もと 被 ひ 分割 ぶんかつ 為 ため 數 すう 個 こ 部分 ぶぶん ,並 なみ 分配 ぶんぱい 到 いた UTF-8的 てき 位 い 元 もと 組 ぐみ 串 くし 中 ちゅう 較低的 てき 位 い 元 もと 的 てき 位置 いち 。在 ざい U+0080的 てき 以下 いか 字 じ 元 もと 都 と 使用 しよう 內含其字元 もと 的 てき 單 たん 位 い 元 もと 組 ぐみ 編 へん 碼。這些編 へん 碼正好 こう 對應 たいおう 7位 い 元 もと 的 てき ASCII字 じ 符 ふ 。在 ざい 其他情況 じょうきょう ,有 ゆう 可能 かのう 需要 じゅよう 多 た 達 たち 4個 こ 字 じ 元 もと 組 ぐみ 來 らい 表示 ひょうじ 一 いち 個 こ 字 じ 元 もと 。這些多 た 位 い 元 もと 組 ぐみ 的 てき 最高 さいこう 有效 ゆうこう 位 い 元 もと 會 かい 設定 せってい 成 なり 1,以防止 ぼうし 與 あずか 7位 い 元 もと 的 てき ASCII字 じ 符 ふ 混淆 こんこう ,並 なみ 保持 ほじ 標準 ひょうじゅん 的 てき 位 い 元 もと 組 くみ 主導 しゅどう 字 じ 串 くし 運 うん 作 さく 順 じゅん 利 り 。
代 だい 碼範圍 はんい 十 じゅう 六 ろく 進 しん 制 せい
標 しるべ 量 りょう 值(scalar value)二 に 進 しん 制 せい
UTF-8二 に 進 しん 制 せい /十 じゅう 六 ろく 進 しん 制 せい
註釋 ちゅうしゃく
000000 - 00007F128個 こ 代 だい 碼
00000000 00000000 0zzzzzzz
0zzzzzzz(00-7F)
ASCII字 じ 元 もと 範圍 はんい ,位 い 元 もと 組 ぐみ 由 よし 零 れい 開始 かいし
七 なな 個 こ z
七 なな 個 こ z
000080 - 0007FF1920個 こ 代 だい 碼
00000000 00000yyy yyzzzzzz
110yyyyy(C0-DF) 10zzzzzz(80-BF)
第 だい 一 いち 個 こ 位 い 元 もと 組 くみ 由 よし 110開始 かいし ,接 せっ 著 ちょ 的 てき 位 い 元 もと 組 くみ 由 よし 10開始 かいし
三 さん 個 こ y;二 に 個 こ y;六 ろく 個 こ z
五 ご 個 こ y;六 ろく 個 こ z
000800 - 00D7FF 00E000 - 00FFFF61440個 こ 代 だい 碼 [Note 1]
00000000 xxxxyyyy yyzzzzzz
1110xxxx(E0-EF) 10yyyyyy 10zzzzzz
第 だい 一 いち 個 こ 位 い 元 もと 組 くみ 由 よし 1110開始 かいし ,接 せっ 著 ちょ 的 てき 位 い 元 もと 組 くみ 由 よし 10開始 かいし
四 よん 個 こ x;四 よん 個 こ y;二 に 個 こ y;六 ろく 個 こ z
四 よん 個 こ x;六 ろく 個 こ y;六 ろく 個 こ z
010000 - 10FFFF1048576個 こ 代 だい 碼
000wwwxx xxxxyyyy yyzzzzzz
11110www(F0-F7) 10xxxxxx 10yyyyyy 10zzzzzz
将 はた 由 よし 11110開始 かいし ,接 せっ 著 ちょ 的 てき 位 い 元 もと 組 くみ 由 よし 10開始 かいし
三 さん 個 こ w;二 に 個 こ x;四 よん 個 こ x;四 よん 個 こ y;二 に 個 こ y;六 ろく 個 こ z
三 さん 個 こ w;六 ろく 個 こ x;六 ろく 個 こ y;六 ろく 個 こ z
Note 1 Unicode在 ざい 範圍 はんい D800-DFFF中 ちゅう 不 ふ 存 そん 在任 ざいにん 何 なん 字 じ 元 もと ,基本 きほん 多 た 文 ぶん 種 しゅ 平面 へいめん 中 ちゅう 約定 やくじょう 了 りょう 這個範圍 はんい 用 よう 於UTF-16擴展標識 ひょうしき 辅助平面 へいめん (兩個 りゃんこ UTF-16表示 ひょうじ 一 いち 個 こ 辅助平面 へいめん 字 じ 符 ふ )。當然 とうぜん ,任 にん 何 なん 編 へん 碼都是 ぜ 可 か 以被轉換 てんかん 到 いた 這個範圍 はんい ,但 ただし 在 ざい unicode中 ちゅう 他 た 們並不 ふ 代表 だいひょう 任 にん 何 なん 合 ごう 法的 ほうてき 值。
例 れい 如,希 まれ 伯 はく 来 らい 语字母 はは aleph(א)的 てき Unicode代 だい 码是U+05D0,按照以下 いか 方法 ほうほう 改 あらため 成 なり UTF-8:
它属于U+0080到 いた U+07FF区域 くいき ,这个表 ひょう 说明它使用 しよう 双 そう 字 じ 节,110 yyyyy 10 zzzzzz.
十 じゅう 六 ろく 进制的 てき 0x05D0换算成 なり 二 に 进制 就是101-1101-0000.
这11位 い 数 すう 按顺序 じょ 放 ひ 入 にゅう "y"部分 ぶぶん 和 わ "z"部分 ぶぶん :11010111 10010000 .
最 さい 后 きさき 结果就是双 そう 字 じ 节,用 よう 十 じゅう 六进制写起来就是0xD7 0x90,这就是 ぜ 这个字 じ 符 ふ aleph(א)的 てき UTF-8编码。
所以 ゆえん 开始的 てき 128个字元 もと (US-ASCII)只 ただ 需一 いち 字 じ 节,接 せっ 下 か 来 らい 的 てき 1920个字符 ふ 需要 じゅよう 双 そう 字 じ 节编码,包括 ほうかつ 带附加 ふか 符号 ふごう 的 てき 拉 ひしげ 丁字 ていじ 母 はは ,希 まれ 腊字母 はは ,西里 にしざと 尔字母 はは ,科 か 普 ひろし 特 とく 语字母 じぼ ,亚美尼 あま 亚语 字母 じぼ ,希 まれ 伯 はく 来 らい 文 ぶん 字母 じぼ 和 わ 阿 おもね 拉 ひしげ 伯 はく 字母 じぼ 的 てき 字 じ 元 もと 。基本 きほん 多 た 文 ぶん 種 しゅ 平面 へいめん 中 ちゅう 其余的 てき 字 じ 元 もと 使用 しよう 三 さん 个字节,剩余 じょうよ 字 じ 符 ふ 使用 しよう 四 よん 个字节。
根 ね 据 すえ 这种方式 ほうしき 可 か 以处理 り 更 さら 大 だい 数量 すうりょう 的 てき 字 じ 元 もと 。原 はら 来 らい 的 てき 规范允 まこと 许长达6字 じ 节的序列 じょれつ ,可 か 以覆盖到31位 い 元 もと (通用 つうよう 字 じ 符 ふ 集 しゅう 原 はら 来 らい 的 てき 极限)。尽 つき 管 かん 如此,2003年 ねん 11月 がつ UTF-8被 ひ RFC 3629重 じゅう 新 しん 规范,只 ただ 能 のう 使用 しよう 原 ばら 来 らい Unicode定 てい 义的区域 くいき ,U+0000到 いた U+10FFFF。根 ね 据 すえ 这些规范,以下 いか 字 じ 节值将 はた 无法出 で 现在合法 ごうほう UTF-8序列 じょれつ 中 ちゅう :
编码(二 に 进制 )
编码(十 じゅう 六 ろく 进制 )
注 ちゅう 释
1100000x
C0, C1
过长编码:双 そう 字 じ 节序列 じょれつ 的 てき 头字节,但 ただし 码点 <= 127
1111111x
FE, FF
无法达到:7或 ある 8字 じ 节序列 じょれつ 的 てき 头字节
111110xx 1111110x
F8, F9, FA, FB, FC, FD
被 ひ RFC 3629规范:5或 ある 6字 じ 节序列 じょれつ 的 てき 头字节
11110101 1111011x
F5, F6, F7
被 ひ RFC 3629规范:码点超 ちょう 过10FFFF的 てき 头字节
对于UTF-8编码中 ちゅう 的 てき 任意 にんい 字 じ 节B,如果B的 てき 第 だい 一 いち 位 い 为0,则B独立 どくりつ 的 てき 表示 ひょうじ 一 いち 个字符 ふ (ASCII码);
如果B的 てき 第 だい 一 いち 位 い 为1,第 だい 二 に 位 い 为0,则B为一个多字节字符中的一个字节(非 ひ ASCII字 じ 符 ふ );
如果B的 てき 前 ぜん 两位为1,第 だい 三 さん 位 い 为0,则B为两个字节表示 ひょうじ 的 てき 字 じ 符 ふ 中 ちゅう 的 てき 第 だい 一 いち 个字节;
如果B的 てき 前 まえ 三 さん 位 い 为1,第 だい 四 よん 位 い 为0,则B为三个字节表示的字符中的第一个字节;
如果B的 てき 前 まえ 四 よん 位 い 为1,第 だい 五 ご 位 い 为0,则B为四个字节表示的字符中的第一个字节;
因 いん 此,对UTF-8编码中 ちゅう 的 てき 任意 にんい 字 じ 节,根 ね 据 すえ 第 だい 一 いち 位 い ,可 か 判断 はんだん 是 ぜ 否 ひ 为ASCII字 じ 符 ふ ;根 ね 据 すえ 前 ぜん 二 に 位 い ,可 か 判断 はんだん 该字节是否 ひ 为一个字符编码的第一个字节;根 ね 据 すえ 前 ぜん 四 よん 位 い (如果前 ぜん 两位均 ひとし 为1),可 か 确定该字节为字 じ 符 ふ 编码的 てき 第 だい 一 いち 个字节,并且可 か 判断 はんだん 对应的 てき 字 じ 符 ふ 由 よし 几个字 じ 节表示 ひょうじ ;根 ね 据 すえ 前 ぜん 五 ご 位 い (如果前 まえ 四 よん 位 い 为1),可 か 判断 はんだん 编码是 ぜ 否 いや 有 ゆう 错误或 ある 数 かず 据 すえ 传输过程中 ちゅう 是 ぜ 否 いや 有 ゆう 错误。
UTF-8的 てき 設計 せっけい 有 ゆう 以下 いか 的 てき 多 た 字 じ 元 もと 組 ぐみ 序列 じょれつ 的 てき 特質 とくしつ :
單位 たんい 元 もと 組 ぐみ 字 じ 符 ふ 的 てき 最高 さいこう 有效 ゆうこう 位 い 元 もと 永遠 えいえん 為 ため 0。
多 た 位 い 元 もと 組 ぐみ 序列 じょれつ 中 ちゅう 的 てき 首 くび 個 こ 字 じ 元 もと 組 ぐみ 的 てき 幾 いく 個 こ 最高 さいこう 有效 ゆうこう 位 い 元 もと 決定 けってい 了 りょう 序列 じょれつ 的 てき 長 ちょう 度 ど 。最高 さいこう 有效 ゆうこう 位 い 為 ため 110
的 てき 是 ぜ 2位 い 元 もと 組 ぐみ 序列 じょれつ ,而1110
的 てき 是 ぜ 三 さん 位 い 元 もと 組 ぐみ 序列 じょれつ ,如此類推 るいすい 。
多 た 位 い 元 もと 組 ぐみ 序列 じょれつ 中 ちゅう 其餘的 てき 位 い 元 もと 組 ぐみ 中 ちゅう 的 てき 首 くび 兩個 りゃんこ 最高 さいこう 有效 ゆうこう 位 い 元 もと 為 ため 10
。
UTF-8的 てき 這些特質 とくしつ ,保證 ほしょう 了 りょう 一 いち 個 こ 字 じ 符 ふ 的 てき 字 じ 节序列 じょれつ 不 ふ 会 かい 包含 ほうがん 在 ざい 另一 いち 個 こ 字 じ 符 ふ 的 てき 字 じ 节序列 じょれつ 中 ちゅう 。這確保 かくほ 了 りょう 以位元 もと 組 ぐみ 為 ため 基礎 きそ 的 てき 部 ぶ 份字串 くし 比 ひ 對 たい (sub-string match)方法 ほうほう 可 か 以適用 てきよう 於在文字 もじ 中 ちゅう 搜 さがせ 尋 ひろ 字 じ 或 ある 詞 し 。有 ゆう 些比較舊的 てき 可變長 かへんちょう 度 ど 8位 い 元 もと 編 へん 碼(如Shift JIS )沒 ぼつ 有 ゆう 這個特質 とくしつ ,故 こ 字 じ 串 くし 比 ひ 對 たい 的 てき 算法 さんぽう 變 へん 得 どく 相當 そうとう 複雜 ふくざつ 。雖然這增加 ぞうか 了 りょう UTF-8編 へん 碼的字 じ 串 くし 的 てき 信 しん 息 いき 冗餘 ,但 ただし 是 ぜ 利 り 多 た 於弊。另外,資料 しりょう 壓縮 あっしゅく 並 なみ 非 ひ Unicode的 てき 目的 もくてき ,所以 ゆえん 不可 ふか 混 こん 為 ため 一 いち 談 だん 。即 そく 使 つかい 在 ざい 傳送 でんそう 過程 かてい 中有 ちゅうう 部 ぶ 份位元 もと 組 ぐみ 因 いん 錯誤 さくご 或 ある 干 ひ 擾而完全 かんぜん 遺失 いしつ ,還 かえ 是 ぜ 有 ゆう 可能 かのう 在 ざい 下 した 一個字符的起點重新同步,令 れい 受損範圍 はんい 受到限 げん 制 せい 。
另一方面 ほうめん ,由 ゆかり 於其位 い 元 もと 組 くみ 序列 じょれつ 設計 せっけい ,如果一個疑似為字符串的序列被驗證為UTF-8編 へん 碼,那 な 麼我們可以有把握 はあく 地 ち 說 せつ 它是UTF-8字 じ 符 ふ 串 くし 。一段兩位元組隨機序列碰巧為合法的UTF-8而非ASCII的 てき 機 き 率 りつ 為 ため 32分 ふん 1。對 たい 於三位元組序列的機率為256分 ふん 1,對 たい 更 さら 長 ちょう 的 てき 序列 じょれつ 的 てき 機 き 率 りつ 就更低 てい 了 りょう 。
UTF-8是 ぜ UNICODE的 てき 一種變長度的編碼表達方式《一般 いっぱん UNICODE為 ため 雙 そう 位 い 元 もと 組 ぐみ (指 ゆび UCS2)》,它由肯·汤普逊 (Ken Thompson ) 于1992年 ねん 建立 こんりゅう ,現在 げんざい 已 やめ 經 けい 標準 ひょうじゅん 化 か 為 ため RFC 3629。UTF-8就是以8位 い 为单元 もと 对UCS进行编码,而UTF-8不 ふ 使用 しよう 大尾 たいび 序 じょ 和 わ 小尾 おび 序 じょ 的 てき 形式 けいしき ,每 まい 個 こ 使用 しよう UTF-8儲 もうか 存 そん 的 てき 字 じ 符 ふ ,除 じょ 了 りょう 第 だい 一 いち 個 こ 字 じ 節 ぶし 外 がい ,其餘字 じ 節 ぶし 的 てき 頭 あたま 兩個 りゃんこ 位 い 元 もと 都 と 是 ぜ 以"10"開始 かいし ,使 つかい 文字 もじ 處理 しょり 器 き 能 のう 夠較快 かい 地 ち 找出每 ごと 個 こ 字 じ 符 ふ 的 てき 開始 かいし 位置 いち 。
但 ただし 為 ため 了 りょう 與 あずか 以前 いぜん 的 てき ASCII碼相容 よう (ASCII為 ため 一 いち 個 こ 位 い 元 もと 組 くみ ),因 いん 此UTF-8選擇 せんたく 了 りょう 使用 しよう 可變長 かへんちょう 度 ど 字 じ 節 ぶし 來 き 儲 もうか 存 そん Unicode:
(注意 ちゅうい :不 ふ 论是Unicode (Table 3.7) [ 12] ,还是ISO 10646 (10.2 UTF-8) [ 13] ,目前 もくぜん 都 と 只 ただ 规定了 りょう 最高 さいこう 码位是 ぜ 0x10FFFF的 てき 字 じ 元 もと 的 てき 编码。下表 かひょう 中 ちゅう 表示 ひょうじ 大 だい 于0x10FFFF的 てき UTF-8编码是 ぜ 不 ふ 符合 ふごう 标准的 てき 。)
Unicode 和 わ UTF-8 之 これ 间的转换关系表 ひょう ( x
字 じ 符 ふ 表示 ひょうじ 码点占 うらない 据 すえ 的 てき 位 い )
码点的 てき 位 い 数 すう
码点起 おこり 值
码点终值
字 じ 节序列 じょれつ
Byte 1
Byte 2
Byte 3
Byte 4
Byte 5
Byte 6
7
U+0000
U+007F
1
0xxxxxxx
11
U+0080
U+07FF
2
110xxxxx
10xxxxxx
16
U+0800
U+FFFF
3
1110xxxx
10xxxxxx
10xxxxxx
21
U+10000
U+1FFFFF
4
11110xxx
10xxxxxx
10xxxxxx
10xxxxxx
26
U+200000
U+3FFFFFF
5
111110xx
10xxxxxx
10xxxxxx
10xxxxxx
10xxxxxx
31
U+4000000
U+7FFFFFFF
6
1111110x
10xxxxxx
10xxxxxx
10xxxxxx
10xxxxxx
10xxxxxx
在 ざい ASCII碼的範圍 はんい ,用 よう 一 いち 個 こ 位 い 元 もと 組 くみ 表示 ひょうじ ,超 ちょう 出 で ASCII碼的範圍 はんい 就用位 い 元 もと 組 くみ 表示 ひょうじ ,這就形成 けいせい 了 りょう 我 わが 們上面 めん 看 み 到 いた 的 てき UTF-8的 てき 表示 ひょうじ 方法 ほうほう ,這樣的 てき 好 こう 處 しょ 是 ぜ 當 とう UNICODE文 ぶん 件 けん 中 ちゅう 只 ただ 有 ゆう ASCII碼時,儲 もうか 存 そん 的 てき 文 ぶん 件 けん 都 と 為 ため 一 いち 個 こ 位 い 元 もと 組 くみ ,所以 ゆえん 就是普通 ふつう 的 てき ASCII文 ぶん 件 けん 無 む 異 こと ,讀取 よみと 的 てき 時候 じこう 也是如此,所以 ゆえん 能 のう 與 あずか 以前 いぜん 的 てき ASCII文 ぶん 件 けん 相 しょう 容 よう 。
大 だい 於ASCII碼的,就會由 よし 上面 うわつら 的 てき 第 だい 一位元組的前幾位表示該unicode字 じ 元 もと 的 てき 長 ちょう 度 ど ,比 ひ 如110xxxxx前 ぜん 三位的二進位表示告訴我們這是個2BYTE的 てき UNICODE字 じ 元 もと ;1110xxxx是 これ 個 こ 三 さん 位 い 的 てき UNICODE字 じ 元 もと ,依 よ 此類推 るいすい ;xxx的 てき 位置 いち 由 よし 字 じ 符 ふ 編 へん 碼數的 てき 二進製表示的位填入。越 こし 靠 もたれ 右 みぎ 的 てき x具有 ぐゆう 越 えつ 少 しょう 的 てき 特殊 とくしゅ 意義 いぎ 。只 ただ 用 よう 最短 さいたん 的 てき 那 な 個 こ 足 あし 夠表達 たち 一個字符編碼數的多字節串。注意 ちゅうい 在 ざい 多 た 字 じ 節 ぶし 串 くし 中 ちゅう ,第 だい 一個字節的開頭"1"的 てき 數 すう 目 もく 就是整 せい 個 こ 串 くし 中 ちゅう 字 じ 節 ぶし 的 てき 數 すう 目 もく 。
ASCII字母 じぼ 繼續 けいぞく 使用 しよう 1字 じ 節 ぶし 儲 もうか 存 そん ,重 じゅう 音 おと 文字 もじ 、希 まれ 臘字母 はは 或 ある 西里 にしざと 爾 なんじ 字母 じぼ 等 とう 使用 しよう 2字 じ 節 ぶし 來 らい 儲 もうか 存 そん ,而常用 じょうよう 的 てき 漢字 かんじ 就要使用 しよう 3字 じ 節 ぶし 。辅助平面 へいめん 字 じ 元 もと 則 のり 使用 しよう 4字 じ 節 ぶし 。
在 ざい UTF-8+BOM格式 かくしき 文 ぶん 件 けん 的 てき 開 ひらき 首 くび ,很多時 じ 都 と 放置 ほうち 一 いち 個 こ U+FEFF字 じ 符 ふ (UTF-8以EF,BB,BF代表 だいひょう ),以顯示 けんじ 這個文字 もじ 檔案是 ぜ 以UTF-8編 へん 碼。
UTF-8圖表 ずひょう 說明 せつめい
UTF-8
最小 さいしょう 码位
0000
最大 さいだい 码位
10FFFF
每 まい 字 じ 节所占 うらない 位 い 数 すう
8 bits
Byte order
N/A
每 まい 个字符 ふ 最小 さいしょう 字 じ 节数
1
每 まい 个字符 ふ 最大 さいだい 字 じ 节数
4
UCS字 じ 符 ふ U+0000到 いた U+007F(ASCII)被 ひ 編 へん 碼為字 じ 節 ぶし 0x00到 いた 0x7F(ASCII兼 けん 容 よう ),這也意味 いみ 著 ちょ 只 ただ 包含 ほうがん 7位 い ASCII字 じ 符 ふ 的 てき 文 ぶん 件 けん 在 ざい ASCII和 わ UTF-8兩 りょう 種 しゅ 編 へん 碼方式 しき 下 か 是 ぜ 一 いち 樣 よう 的 てき 。
所有 しょゆう >U+007F的 てき UCS字 じ 符 ふ 被 ひ 編 へん 碼為一個多個字節的串,每 まい 個 こ 字 じ 節 ぶし 都 と 有 ゆう 標記 ひょうき 位 い 集 しゅう 。因 よし 此,ASCII字 じ 節 ぶし (0x00-0x7F)不可能 ふかのう 作為 さくい 任 にん 何 なん 其他字 じ 符 ふ 的 てき 一 いち 部分 ぶぶん 。
表示 ひょうじ 非 ひ ASCII字 じ 符 ふ 的 てき 多 た 字 じ 節 ぶし 串 くし 的 てき 第 だい 一個字節總是在0xC0到 いた 0xFD的 てき 範圍 はんい 裡 うら ,並 なみ 指出 さしで 這個字 じ 符 ふ 包含 ほうがん 多少 たしょう 個 こ 字 じ 節 ぶし 。多 た 字 じ 節 ぶし 串 くし 的 てき 其餘字 じ 節 ぶし 都 と 在 ざい 0x80到 いた 0xBF範圍 はんい 裡 うら ,這使得 とく 重 おも 新 しん 同 どう 步 ふ 非常 ひじょう 容易 ようい ,並 なみ 使 し 編 へん 碼無國界 こっかい ,且很少 しょう 受丟失 しつ 字 じ 節 ぶし 的 てき 影響 えいきょう 。
可 か 以編入 へんにゅう 所有 しょゆう 可能 かのう 的 てき 231個 いっこ UCS代 だい 碼
UTF-8編 へん 碼字符 ふ 理論 りろん 上 じょう 可 か 以最多 た 到 いた 6個 こ 字 じ 節 ぶし 長 ちょう ,然 しか 而16位 い BMP字 じ 符 ふ 最多 さいた 只 ただ 用 よう 到 いた 3字 じ 節 ぶし 長 ちょう 。
Bigendian UCS-4字 じ 節 ぶし 串 くし 的 てき 排列 はいれつ 順序 じゅんじょ 是 ぜ 預 あずか 定 てい 的 てき 。
字 じ 節 ぶし 0xFE和 わ 0xFF在 ざい UTF-8編 へん 碼中從 したがえ 未 み 用 もちい 到 いた ,同時 どうじ ,UTF-8以位元 もと 組 ぐみ 為 ため 編 へん 碼單元 たんげん ,它的位 い 元 もと 組 くみ 順序 じゅんじょ 在 ざい 所有 しょゆう 系統 けいとう 中 なか 都 と 是 ぜ 一 いち 様 よう 的 てき ,没 ぼつ 有 ゆう 位 い 元 もと 組 くみ 序 じょ 的 てき 問題 もんだい ,也因此它實際 じっさい 上 じょう 并不需要 じゅよう BOM 。
與 あずか UTF-16或 ある 其他Unicode編 へん 碼相比 ひ ,對 たい 於不支持 しじ Unicode和 わ XML的 てき 系統 けいとう ,UTF-8更 さら 不 ふ 容易 ようい 造成 ぞうせい 問題 もんだい 。
总体来 らい 说,在 ざい Unicode字 じ 符 ふ 串 くし 中 ちゅう 不可能 ふかのう 由 よし 码点数量 すうりょう 决定显示它所需要 じゅよう 的 てき 长度,或 ある 者 もの 显示字 じ 符 ふ 串 くし 之 の 后 きさき 在 ざい 文 ぶん 本 ほん 缓冲区 く 中 ちゅう 光 ひかり 标应该放置 ほうち 的 てき 位置 いち ;组合字 じ 符 ふ 、变宽字体 じたい 、不可 ふか 打 だ 印字 いんじ 符 ふ 和 わ 从右至 いたり 左 ひだり 的 てき 文字 もじ 都 と 是 ぜ 其归因 いん 。
所以 ゆえん 尽 つき 管 かん 在 ざい UTF-8字 じ 符 ふ 串 くし 中 ちゅう 字 じ 元 もと 数量 すうりょう 与 あずか 码点数量 すうりょう 的 てき 关系比 ひ UTF-32更 さら 为复杂,在 ざい 实际中 ちゅう 很少会 かい 遇 ぐう 到 いた 有 ゆう 不同 ふどう 的 てき 情 じょう 形 がた 。
更 さら 詳細 しょうさい 的 てき 說 せつ ,UTF-8編 へん 碼具有 ぐゆう 以下 いか 幾 いく 點 てん 優 ゆう 點 てん :
ASCII是 ぜ UTF-8的 てき 一 いち 个子 こ 集 しゅう 。因 よし 为一个纯ASCII字 じ 符 ふ 串 くし 也是一 いち 个合法的 ほうてき UTF-8字 じ 符 ふ 串 くし ,所以 ゆえん 现存的 てき ASCII文 ぶん 本 ほん 不 ふ 需要 じゅよう 转换。为传统的扩展ASCII字 じ 符 ふ 集 しゅう 设计的 てき 软件通常 つうじょう 可 か 以不经修改 あらため 或 ある 很少修 おさむ 改 あらため 就能与 あずか UTF-8一 いち 起 おこり 使用 しよう 。
使用 しよう 标准的 てき 面 めん 向 こう 字 じ 节的排 はい 序 じょ 例 れい 程 ほど 对UTF-8排 はい 序 じょ 将 はた 产生与 あずか 基 もと 于Unicode代 だい 码点排 はい 序 じょ 相 しょう 同 どう 的 てき 结果。(尽 つき 管 かん 这只有 ゆう 有限 ゆうげん 的 てき 有用 ゆうよう 性 せい ,因 いん 为在任 ざいにん 何 なん 特定 とくてい 语言或 ある 文化 ぶんか 下 か 都 と 不 ふ 太 ふと 可能 かのう 有 ゆう 仍可接受 せつじゅ 的 てき 文字 もじ 排列 はいれつ 顺序。)
UTF-8和 わ UTF-16都 と 是 ぜ 可 か 扩展标记语言文 ぶん 档的标准编码。所有 しょゆう 其它编码都 と 必须通 どおり 过显式 しき 或 ある 文 ぶん 本 ほん 声明 せいめい 来 らい 指定 してい 。[1] (页面存 そん 档备份 ,存 そん 于互联网档案 あん 馆 )
任 にん 何 なに 面 めん 向 こう 字 じ 节的 てき 字 じ 符 ふ 串 くし 搜索 そうさく 算法 さんぽう 都 と 可 か 以用于UTF-8的 てき 数 すう 据 すえ (只 ただ 要 よう 输入仅由完 かん 整 せい 的 てき UTF-8字 じ 符 ふ 组成)。但 ただし 是 ぜ ,对于包含 ほうがん 字 じ 符 ふ 记数的 てき 正 せい 则表达式或 ある 其它结构必须小心 しょうしん 。
UTF-8字 じ 符 ふ 串 くし 可 か 以由一个简单的算法可靠地识别出来。就是,一个字符串在任何其它编码中表现为合法的UTF-8的 てき 可能 かのう 性 せい 很低,并随字 じ 符 ふ 串 くし 长度增 ぞう 长而减小。举例说,字 じ 元 もと 值C0,C1,F5至 いたり FF从来没 ぼつ 有 ゆう 出 で 现。为了更 さら 好 このみ 的 てき 可 か 靠 もたれ 性 せい ,可 か 以使用 しよう 正 せい 则表达式来 らい 统计非 ひ 法 ほう 过长和 わ 替 がえ 代 だい 值(可 か 以查看 み W3 FAQ: Multilingual Forms (页面存 そん 档备份 ,存 そん 于互联网档案 あん 馆 )上 じょう 的 てき 验证UTF-8字 じ 符 ふ 串 くし 的 てき 正 せい 则表达式)。
與 あずか UCS-2的 てき 比較 ひかく :ASCII轉 てん 换成UCS-2,在 ざい 編 へん 碼前插入 そうにゅう 一 いち 個 こ 0x0。用 よう 這些編 へん 碼,會 かい 含括一 いち 些控制 せい 符 ふ ,比 ひ 如"或 ある '/',這在UNIX和 わ 一 いち 些C函數 かんすう 中 ちゅう ,將 しょう 會 かい 產 さん 生 せい 嚴重 げんじゅう 錯誤 さくご 。因 よし 此可以肯定 こうてい ,UCS-2不適合 ふてきごう 作為 さくい Unicode的 てき 外部 がいぶ 編 へん 碼,也因此誕生 せい 了 りょう UTF-8。
編 へん 寫 うつし 不良 ふりょう 的 てき 解析 かいせき 器 き
编辑
如果一 いち 个 UTF-8 解析 かいせき 器 き 写 うつし 得 とく 很差(并且与 あずか 当 とう 前 ぜん 标准的 てき 版本 はんぽん 不 ふ 兼 けん 容 よう ),那 な 么它接收 せっしゅう 到 いた 一 いち 些伪 UTF-8 时会将 はた 其转换成看 み 似 に 正 せい 确实则错误的 Unicode 输出。处理八位表示的校验例程可能遗漏一些信息。
正 せい 则表达式可 か 以进行 ぎょう 很多高 だか 级的英文 えいぶん 模糊 もこ 检索。例 れい 如,[a-h]表示 ひょうじ a 到 いた h 间所有 しょゆう 字母 じぼ 。
同 どう 样 GBK 编码的中 てきちゅう 文也 ふみや 可 か 以这样利用 りよう 正 せい 则表达式 ,比 ひ 如在只 ただ 知道 ともみち 一个字的读音而不知道怎么写的情况下,也可用 よう 正 せい 则表达式 检索,因 いん 为 GBK 编码是 ぜ 按读音 おん 排 はい 序 じょ 的 てき 。但 ただし 是 ぜ Unicode 汉字不 ふ 是 ぜ 按读音 おん 排 はい 序 じょ 的 てき ,所以 ゆえん 不利 ふり 于用正 せい 则表达式检索。虽然正 せい 则表达式检索并未考 こう 虑中文 ぶん 的 てき 多 た 音字 おんじ ,但 ただし 是 ぜ 由 よし 于中文 ぶん 的 てき 多 た 音字 おんじ 数量 すうりょう 不 ふ 多 た ,不 ふ 少 しょう 多 た 音字 おんじ 还是同音 どうおん 不同 ふどう 调类型 がた 的 てき 多 た 音字 おんじ ,所以 ゆえん 大 だい 多数 たすう 情 じょう 况下正 せい 则表达式检索是 ぜ 还可以接受 せつじゅ 的 てき 。不 ふ 过 Unicode 汉字按部首 ぶしゅ 排 はい 序 じょ ,因 いん 此在只 ただ 知道 ともみち 一個字的部首而不知道如何發音的情况下,UTF-8 可用 かよう 正 せい 则表达式 检索而 GBK 不 ふ 行 くだり 。
可能 かのう 無法 むほう 用 よう 舊 きゅう 的 てき C 語 ご 言 げん 函 はこ 式 しき 庫 こ 讀寫
编辑
由 よし 於UTF-8在 ざい 編 へん 碼中可能 かのう 有 ゆう 著 ちょ 空 そら 字 じ 元 もと (null character,U+0000),這會導 しるべ 致C語 ご 言 げん 函 はこ 示 しめせ 庫 こ 以及其延伸 えんしん 的 てき 程 ほど 式 しき 解析 かいせき 失敗 しっぱい ,因 いん 為 ため 這些舊 きゅう 有 ゆう 的 てき 程 ほど 式 しき 庫 こ 使用 しよう 這個字 じ 元來 がんらい 標記 ひょうき 字 じ 串 くし 的 てき 結束 けっそく 。然 しか 而,之 これ 所以 ゆえん 說 せつ 「可能 かのう 」,是 ぜ 因 いん 為 ため 這個字 じ 元 もと 是 ぜ 控 ひかえ 制 せい 字 じ 元 もと ,理論 りろん 上 じょう 不 ふ 會 かい 出 で 現在 げんざい XML 等 ひとし 純 じゅん 文字 もじ 檔案中 ちゅう 。當 とう 萬不得已要使用空字元的時候,可能 かのう 的 てき 解決 かいけつ 方法 ほうほう 是 ぜ 考慮 こうりょ 使用 しよう Java 的 てき 變種 へんしゅ UTF-8 ——使用 しよう 0xc0 0x80 來 らい 編 へん 碼空字 じ 元 もと 。
UTF-8 的 てき ASCII 字 じ 元 もと 只 ただ 占 うらない 用 よう 一 いち 个字节,比 ひ 较节省 しょう 空 そら 间,但 ただし 是 ぜ 更 さら 多 た 字 じ 元 もと 的 てき UTF-8 編 へん 碼佔用 よう 的 てき 空間 くうかん 就要多 た 出 で 1/2,特別 とくべつ 是 ぜ 中 ちゅう 文 ぶん 、日 にち 文和 ふみかず 韓 かん 文 ぶん (CJK )這樣的 てき 方 かた 塊 かたまり 文字 もじ ,它们大 だい 多 た 需要 じゅよう 三 さん 个字节。
雖然不 ふ 是 ぜ 標準 ひょうじゅん ,但 ただし 許多 きょた Windows程 ほど 序 じょ (包括 ほうかつ Windows记事本 ほん )在 ざい UTF-8編 へん 碼的檔案的 てき 開 ひらき 首 くび 加入 かにゅう 一 いち 段位 だんい 元 もと 組 ぐみ 串 くし EF BB BF
。這是位 い 元 もと 組 ぐみ 順序 じゅんじょ 記號 きごう U+FEFF
的 てき UTF-8編 へん 碼結果 けっか 。對 たい 於沒有 ゆう 預 あずか 期 き 要 よう 處理 しょり UTF-8的 てき 文字 もじ 編輯 へんしゅう 器 き 和 かず 瀏 りゅう 覽 らん 器 き 會 かい 顯示 けんじ 成 なり ISO-8859-1字 じ 符 ふ 串 くし 
。
Posix系 けい 统明确不建 けん 议使用字 ようじ 节序掩码EF BB BF
。[ 14] 因 いん 为很多 た 文 ぶん 本文 ほんぶん 件 けん 期 き 望 もち 以 “#!”(Shebang )开头指示 しじ 要 よう 运行的 てき 程 ほど 序 じょ 。Linux系 けい 统选择使用 しよう Unicode规范形式 けいしき Normalization Form C(NFC),即 そく 优先使用 しよう 预组装 そう 字 じ 符 ふ (precomposed character)而非组合字 じ 符 ふ 序列 じょれつ (combining character sequence)。
2002年 ねん 9月 がつ 发布的 てき Red Hat Linux 8.0 才 ざい 开始正式 せいしき 把 わ 大 だい 多数 たすう 区域 くいき 设置的 てき 默 だま 认编码设为UTF-8。此前是 ぜ 各 かく 种语言 げん 的 てき 但 ただし 字 じ 节编码为主 ぬし 。2004年 ねん 9月 がつ SuSE Linux 9.1 开始,缺 かけ 省 しょう 编码迁移为UTF-8。
字 じ 符 ふ 串 くし 处理时,使用 しよう UTF-8或 ある locale依 よ 赖的多 た 字 じ 节编码情形 がた ,比 ひ 使用 しよう C语言wchar_t的 てき 宽字符 ふ 固定 こてい 宽度编码,要 よう 慢1至 いたり 2个数量 すうりょう 级。[ 14]
在 ざい 通常 つうじょう 用法 ようほう 下 か ,Java 程 ほど 序 じょ 语言在 ざい 通 どおり 过InputStreamReader
和 わ OutputStreamWriter
读取和 わ 写 うつし 入 にゅう 串 くし 的 てき 时候支持 しじ 标准UTF-8。但 ただし 是 ぜ ,Java也支持 しじ 一种非标准的变体UTF-8,供 きょう 对象的 てき 序列 じょれつ 化 か ,Java本地 ほんじ 界面 かいめん 和 かず 在 ざい class文 ぶん 件 けん 中 ちゅう 的 てき 嵌入 かんにゅう 常数 じょうすう 時 じ 使用 しよう 的 てき modified UTF-8
。
标准和 わ 變種 へんしゅ 的 てき UTF-8有 ゆう 两个不 ふ 同点 どうてん 。第 だい 一 いち ,空 そら 字 じ 符 ふ (null character,U+0000)使用 しよう 雙 そう 字 じ 节的0xc0 0x80,而不是 ぜ 单字节的0x00。这保证了在 ざい 已 やめ 编码字 じ 串 くし 中 ちゅう 没 ぼつ 有 ゆう 嵌入 かんにゅう 空 そら 字 じ 节。因 よし 为C语言 等 とう 语言程 ほど 序 じょ 中 ちゅう ,单字节空字 じ 符 ふ 是 ぜ 用 よう 来 らい 标志字 じ 串 くし 结尾的 てき 。当 とう 已 やめ 编码字 じ 串 くし 放 ひ 到 いた 这样的 てき 语言中 ちゅう 處理 しょり ,一个嵌入的空字符将把字串一刀两断。
第 だい 二 に 个不同点 どうてん 是 ぜ 基本 きほん 多 た 文 ぶん 種 しゅ 平面 へいめん 之 これ 外字 がいじ 符 ふ 的 てき 编码的 てき 方法 ほうほう 。在 ざい 标准UTF-8中 ちゅう ,这些字 じ 符 ふ 使用 しよう 4字 じ 节形式 しき 编码,而在修正 しゅうせい 的 てき UTF-8中 ちゅう ,这些字 じ 符 ふ 和 わ UTF-16一样首先表示为代理对(surrogate pairs),然 しか 后 きさき 再 さい 像 ぞう CESU-8 那 な 样按照 あきら 代理 だいり 对分别编码。这样修正 しゅうせい 的 てき 原因 げんいん 更 さら 是 ぜ 微妙 びみょう 。Java中 ちゅう 的 てき 字 じ 符 ふ 为16位 い 长,因 いん 此一些Unicode字 じ 符 ふ 需要 じゅよう 两个Java字 じ 符 ふ 来 らい 表示 ひょうじ 。语言的 てき 这个性 せい 质蓋過 か 了 りょう Unicode的 てき 增 ぞう 补平面 めん 的 てき 要求 ようきゅう 。尽 つき 管 かん 如此,為 ため 了 りょう 要 よう 保持 ほじ 良好 りょうこう 的 てき 向 こう 后 きさき 兼 けん 容 よう 、要 よう 改變 かいへん 也不容易 ようい 了 りょう 。这个修正 しゅうせい 的 てき 编码系統 けいとう 保 ほ 证了一个已编码字串可以一次编为一个UTF-16码,而不是 ぜ 一 いち 次 じ 一 いち 个Unicode码点。不幸 ふこう 的 てき 是 ぜ ,这也意味 いみ 着 ぎ UTF-8中 ちゅう 需要 じゅよう 4字 じ 节的字 じ 符 ふ 在 ざい 變種 へんしゅ UTF-8中 ちゅう 变成需要 じゅよう 6字 じ 节。
因 いん 为變種 しゅ UTF-8并不 ふ 是 ぜ UTF-8,所以 ゆえん 用 よう 户在交换信 しん 息 いき 和 わ 使用 しよう 互联网的时候需要 じゅよう 特 とく 别注意 ちゅうい 不要 ふよう 误把變種 へんしゅ UTF-8當 とう 成 なり UTF-8数 すう 据 すえ 。
Mac OS X 操作 そうさ 系 けい 统使用 しよう 統 すべ 一碼正規形式中的分解式標準等價(canonically decomposed Unicode),在 ざい 文 ぶん 件 けん 系 けい 统中 ちゅう 使用 しよう UTF-8编码进行文 こうぶん 件 けん 命名 めいめい ,這做法 ほう 通常 つうじょう 被 ひ 称 しょう 为UTF-8-MAC。分解 ぶんかい 式 しき 標準 ひょうじゅん 等價 とうか 中 ちゅう ,预组合 あい 字 じ 符 ふ 是 ぜ 被 ひ 禁止 きんし 使用 しよう 的 てき ,必须以组合字 じ 符 ふ 取 と 代 だい 。
这种方法 ほうほう 使 し 分 ぶん 类变得 どく 非常 ひじょう 简单,但 ただし 是 ぜ 会 かい 搞混那 な 些使用 しよう 预组合 あい 字 じ 符 ふ 为标准 なぞらえ 、组合字 じ 符 ふ 用 よう 来 らい 显示特殊 とくしゅ 字 じ 符 ふ 的 てき 软件。Mac系 けい 统的这种NFD数 すう 据 すえ 是 これ 統一 とういつ 碼正規 せいき 形式 けいしき (Unicode normalization)的 てき 一 いち 种格式 しき 。而其他 た 系 けい 统,包括 ほうかつ Windows 和 わ Linux ,使用 しよう 統一 とういつ 碼规范的NFC形式 けいしき ,也是W3C 标准使用 しよう 的 てき 形式 けいしき 。所以 ゆえん 通常 つうじょう NFD数 すう 据 すえ 必须转换成 なり NFC才能 さいのう 被 ひ 其他平台 ひらだい 或 ある 者 もの 网络使用 しよう 。
苹果 りんご 开发者 しゃ 专区有 ゆう 关于此问题的讨论:Apple Q&A 1173 (页面存 そん 档备份 ,存 そん 于互联网档案 あん 馆 )。
MySQL 字 じ 符 ふ 编码集中 しゅうちゅう 有 ゆう 两套UTF-8编码实现:“utf8”和 かず “utf8mb4”,其中“utf8”是 ぜ 一个字最多占据3字 じ 节空 そら 间的编码实现;而“utf8mb4”则是一个字最多占据4字 じ 节空间的编码实现,也就是 ぜ UTF-8的 てき 完 かん 整 せい 实现。这是由 よし 于MySQL在 ざい 4.1版本 はんぽん 开始支持 しじ UTF-8编码(当 とう 时参考 さんこう UTF-8草案 そうあん 版本 はんぽん 为RFC 2279 )时,为2003年 ねん ,并且在 ざい 同年 どうねん 9月 がつ 限 げん 制 せい 了 りょう 其实现的UTF-8编码的 てき 空 そら 间占用 よう 最多 さいた 为3字 じ 节,而UTF-8正式 せいしき 形成 けいせい 标准化 か 文 ぶん 档(RFC 3629 )是 ぜ 其之后 きさき 。限 きり 制 せい UTF-8编码实现的 てき 编码空 そら 间占用 よう 一般 いっぱん 被 ひ 认为是 ぜ 考 こう 虑到数 すう 据 すえ 库文件 けん 设计的 てき 兼 けん 容 よう 性 せい 和 わ 读取最 さい 优化,但 ただし 实际上 じょう 并没有 ゆう 达到目的 もくてき ,而且在 ざい UTF-8编码开始出 で 现需要 よう 存 そん 入 にゅう 非 ひ 基本 きほん 多 た 文 ぶん 种平面 めん 的 てき Unicode字 じ 符 ふ (例 れい 如emoji字 じ 符 ふ )时导致无法 ほう 存 そん 入 いれ (由 ゆかり 于3字 じ 节的实现只 ただ 能 のう 存 そん 入 にゅう 基本 きほん 多 た 文 ぶん 种平面 めん 内的 ないてき 字 じ 符 ふ )。直 ちょく 到 いた 2010年 ねん 在 ざい 5.5版本 はんぽん 推出“utf8mb4”来 らい 代替 だいたい 、“utf8”重 じゅう 命名 めいめい 为“utf8mb3”并调整 せい “utf8”为“utf8mb3”的 てき 别名,并不建 けん 议使用 しよう 旧 きゅう “utf8”编码,以此修正 しゅうせい 遗留问题。[ 15] [ 16] [ 17] [ 18]
^ 1.0 1.1 Davis, Mark . Unicode over 60 percent of the web . Official Google Blog. 2012-02-03 [2019-11-23 ] . (原始 げんし 内容 ないよう 存 そん 档 于2018-08-09).
^ Pike, Rob. UTF-8 history . 2003-04-30 [2019-11-23 ] . (原始 げんし 内容 ないよう 存 そん 档 于2006-10-29). ...UTF-8 was designed, in front of my eyes, on a placemat in a New Jersey diner one night in September or so 1992...So that night Ken wrote packing and unpacking code and I started tearing into the C and graphics libraries. The next day all the code was done... .
^ Pike, Rob; Thompson, Ken. Hello World or Καλημέρα κόσμε or こんにちは 世界 せかい (PDF) . Proceedings of the Winter 1993 USENIX Conference. 1993 [2019-11-23 ] . (原始 げんし 内容 ないよう 存 そん 档 (PDF) 于2017-10-11).
^ Encoding Standard . encoding.spec.whatwg.org. [2019-11-23 ] . (原始 げんし 内容 ないよう 存 そん 档于2015-02-04) (英 えい 语) . The problems outlined here go away when exclusively using UTF-8, which is one of the many reasons that is now the mandatory encoding for all things.
^ Usage Survey of Character Encodings broken down by Ranking . w3techs.com. [2019-11-23 ] . (原始 げんし 内容 ないよう 存 そん 档 于2022-01-21) (英 えい 语) .
^ Historical trends in the usage of character encodings . [2019-11-14 ] .
^ UTF-8 Usage Statistics . BuiltWith. [2011-03-28 ] . (原始 げんし 内容 ないよう 存 そん 档 于2021-12-07).
^ Using International Characters in Internet Mail . Internet Mail Consortium. 1998-08-01 [2007-11-08 ] . (原始 げんし 内容 ないよう 存 そん 档 于2007-10-26).
^ Specifying the document's character encoding , HTML5.2, World Wide Web Consortium , 14 December 2017 [2018-06-03 ] , (原始 げんし 内容 ないよう 存 そん 档 于2019-06-13)
^ 參考 さんこう RFC 2277 section 3.1
^ Using International Characters in Internet Mail . 2007-10-26 [2018-07-27 ] . 原始 げんし 内容 ないよう 存 そん 档于2007-10-26.
^ The Unicode Standard, Version 13.0, Chapter 3 (PDF) . [2020-03-23 ] . (原始 げんし 内容 ないよう 存 そん 档 (PDF) 于2021-09-20).
^ ISO 10646标准下 か 载页面 めん . [2020-03-23 ] . (原始 げんし 内容 ないよう 存 そん 档 于2022-01-19).
^ 14.0 14.1 UTF-8 and Unicode FAQ for Unix/Linux by Markus Kuhn . [2005-06-16 ] . (原始 げんし 内容 ないよう 存 そん 档 于2018-09-24).
^ MySQL :: MySQL 8.0 Reference Manual :: 10.9.3 The utf8 Character Set (Alias for utf8mb3) . dev.mysql.com. [2020-04-03 ] . (原始 げんし 内容 ないよう 存 そん 档 于2021-10-31).
^ MySQL :: MySQL 8.0 Reference Manual :: 10.9.2 The utf8mb3 Character Set (3-Byte UTF-8 Unicode Encoding) . dev.mysql.com. [2020-04-03 ] . (原始 げんし 内容 ないよう 存 そん 档 于2022-01-13).
^ MySQL :: MySQL 8.0 Reference Manual :: 10.9.1 The utf8mb4 Character Set (4-Byte UTF-8 Unicode Encoding) . dev.mysql.com. [2020-04-03 ] . (原始 げんし 内容 ないよう 存 そん 档 于2021-10-25).
^ Hooper, Adam. In MySQL, never use “utf8”. Use “utf8mb4”. . Medium. 2019-08-19 [2020-04-03 ] . (原始 げんし 内容 ないよう 存 そん 档 于2020-11-30) (英 えい 语) .
The Unicode Standard, Version 5.0, Fifth Edition , The Unicode Consortium, Addison-Wesley Professional,2006年 ねん 10月 がつ 27日 にち 。ISBN 0-321-48091-0
The Unicode Standard, Version 4.0 , The Unicode Consortium, Addison-Wesley Professional,2003年 ねん 8月 がつ 27日 にち 。ISBN 0-321-18578-1