(Translated by https://www.hiragana.jp/)
UTF-8 - 維基百科,自由的百科全書

UTF-8

すべ一碼編碼不同的字節倍數

UTF-88-bit Unicode Transformation FormatいちしゅはりたいUnicodeてき可變長かへんちょうもとへん,也是いちしゅくび。它可以用一至四個位元組對Unicodeもと集中しゅうちゅうてき所有しょゆう有效ゆうこうへん碼點進行しんこうへん碼,ぞくUnicode標準ひょうじゅんてきいち部分ぶぶん最初さいしょゆかり肯·あまねへりくだぬの·かつ提出ていしゅつ[2][3]よし於較しょう值的へん碼點一般使用頻率較高,直接ちょくせつ使用しようUnicodeへん碼效りつ低下ていか大量たいりょう浪費ろうひぬし記憶きおくたい空間くうかん。UTF-8就是ためりょう解決かいけつこう下相おりあいようASCII碼而設計せっけい,Unicode中前ちゅうぜん128もと使用しようあずかASCII碼相どうてき二進制值的單個もとぐみ進行しんこうへん碼,而且字面じめんあずかASCII碼的字面じめんいちいち對應たいおう,這使とくばららい處理しょりASCIIもとてき軟件須或ただ須做しょう份修あらためそく繼續けいぞく使用しようよし此,它逐ややなりため電子でんし郵件あみぺーじ及其ほかもうかそんある傳送でんそう文字もじ優先ゆうせん採用さいようてきへん碼方しき

UTF-8
かたりげん國際こくさい
標準ひょうじゅんUnicode
分類ぶんるいEASCII
へん長編ちょうへん
Unicode轉換てんかん格式かくしき
つぶせてんUS-ASCII
變換へんかん/へんISO 10646 (Unicode)
まえようUTF-1
顯示けんじりょうたにしょ記錄きろくてき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 JISGB 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がつ,這個建議けんぎよしIBMX/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-8RFC 3629じゅう新規しんきはんただのう使用しようばららいUnicode定義ていぎてき區域くいき,U+0000いたU+10FFFF,也就せつ最多さいたよんもとくみ):

  1. 128US-ASCIIもとただ需一個位元組編碼(Unicode範圍はんいよしU+0000いたりU+007F)。
  2. おびゆう附加ふか符號ふごうてきひしげちょうあやまれ臘文西里にしざとなんじ字母じぼ亞美あみあままれはくらいぶんおもねひしげはくぶん敘利ぶん它拿字母じぼのり需要じゅよう兩個りゃんこもとくみへん碼(Unicode範圍はんいよしU+0080いたりU+07FF)。
  3. 其他基本きほんぶんしゅ平面へいめん(BMP)ちゅうてきもと(這包含ほうがんりょうだい部分ぶぶん常用じょうよう,如大部分ぶぶんてき漢字かんじ使用しよう三個位元組編碼(Unicode範圍はんいよしU+0800いたりU+FFFF)。
  4. 其他極少きょくしょう使用しようてき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 - 00007F
128だい
00000000 00000000 0zzzzzzz 0zzzzzzz(00-7F) ASCIIもと範圍はんいもとぐみよしれい開始かいし
ななz ななz
000080 - 0007FF
1920だい
00000000 00000yyy yyzzzzzz 110yyyyy(C0-DF) 10zzzzzz(80-BF) だいいちもとくみよし110開始かいし接着せっちゃくてきもとくみよし10開始かいし
さんy;y;ろくz y;ろくz
000800 - 00D7FF
00E000 - 00FFFF
61440だい[Note 1]
00000000 xxxxyyyy yyzzzzzz 1110xxxx(E0-EF) 10yyyyyy 10zzzzzz だいいちもとくみよし1110開始かいし接着せっちゃくてきもとくみよし10開始かいし
よんx;よんy;y;ろくz よんx;ろくy;ろくz
010000 - 10FFFF
1048576だい
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區域くいき,這個ひょう說明せつめい使用しようそうもとくみ110yyyyy 10zzzzzz.
  • じゅうろくしんせいてき0x05D0換算かんさんなりしんせい就是101-1101-0000.
  • 這11すう按順じょにゅう"y"部分ぶぶん"z"部分ぶぶん:11010111 10010000.
  • 最後さいご結果けっか就是そうもとくみようじゅう六進制寫起來就是0xD7 0x90,這就這個もとaleph(א)てきUTF-8へん碼。

所以ゆえん開始かいしてき128もと(US-ASCII)ただいちもとぐみせっらいてき1920もと需要じゅようそうもとくみへん碼,包括ほうかつたい附加ふか符號ふごうてきひしげ丁字ていじははまれ臘字はは西里にしざとなんじ字母じぼひろしとく字母じぼ亞美あみあま字母じぼまれはくらいぶん字母じぼおもねひしげはく字母じぼてきもと基本きほんぶんしゅ平面へいめんちゅう其餘てきもと使用しようさんもとくみ剩餘じょうよもと使用しようよんもとぐみ

根據こんきょ這種方式ほうしき處理しょりさらだい數量すうりょうてきもとはららいてき規範きはん允許いんきょちょうたち6もとぐみてき序列じょれつ以覆ぶたいた31もと通用つうようもとしゅうはららいてき極限きょくげん)。儘管如此,2003ねん11がつUTF-8RFC 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へん碼位もとくみ含義

編輯へんしゅう
  • たい於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てき理由りゆう

編輯へんしゅう

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てきへん碼方しき

編輯へんしゅう

UTF-8UNICODEてき一種變長度的編碼表達方式《一般いっぱん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圖表ずひょう說明せつめい
UTF-8
最小さいしょう碼位 0000
最大さいだい碼位 10FFFF
まいもとくみしょ佔位すう 8 bits
Byte order N/A
まいもと最小さいしょうもとくみすう 1
まいもと最大さいだいもとくみすう 4
  • UCSもとU+0000いたU+007F(ASCII)へん碼為もとくみ0x00いた0x7F(ASCIIしょうよう),這也意味いみただ包含ほうがん7ASCIIもとてき檔案ざいASCIIUTF-8りょうしゅへん碼方しきいちようてき
  • 所有しょゆう>U+007FてきUCSもとへん碼為一個多個位元組的串,まいもとくみゆう標記ひょうきしゅうよし此,ASCIIもとぐみ(0x00-0x7F)不可能ふかのう作為さくいにんなん其他もとてきいち部分ぶぶん
  • 表示ひょうじASCIIもとてきもとくみくしてきだい一個位元組總是在0xC0いた0xFDてき範圍はんいうらなみ指出さしで這個もと包含ほうがん多少たしょうもとぐみもとぐみくしてき其餘もとくみざい0x80いた0xBF範圍はんいうら,這使とくおもしんどう非常ひじょう容易よういなみ使へん碼無國界こっかい,且很しょう受丟しつもとくみてき影響えいきょう
  • 編入へんにゅう所有しょゆう可能かのうてき231個いっこUCSだい
  • UTF-8へん碼字もと理論りろんじょう以最いた6もと組長くみちょうしか而16もとBMPもと最多さいたただよういた3もと組長くみちょう
  • Bigendian UCS-4もとぐみくしてき排列はいれつ順序じゅんじょあずかていてき
  • もとぐみ0xFE0xFFざいUTF-8へん碼中したがえもちいいた同時どうじ,UTF-8以位もとぐみためへん單元たんげん,它的もとくみ順序じゅんじょざい所有しょゆう系統けいとうなかいちようてきぼつゆうもとくみじょてき問題もんだい,也因此它實際じっさいじょうなみ需要じゅようBOM
  • あずかUTF-16ある其他Unicodeへん碼相たい於不支援しえんUnicodeXMLてき系統けいとう,UTF-8さら容易ようい造成ぞうせい問題もんだい

UTF-8へん碼的ゆうてん

編輯へんしゅう

總體そうたいらいせつざいUnicodeくしちゅう不可能ふかのうよし碼點數量すうりょう決定けってい顯示けんじ它所需要じゅようてきちょうあるもの顯示けんじくしこれざい文字もじ緩衝かんしょうちゅうゆうしめぎおう放置ほうちてき位置いち組合くみあいもとへんひろしがた不可ふかれつ印字いんじ元和がんわしたがえみぎいたりひだりてき文字もじ其歸いん

所以ゆえん儘管ざいUTF-8くしちゅうもと數量すうりょうあずか碼點數量すうりょうてき關係かんけいUTF-32さらため複雜ふくざつざい實際じっさいちゅう很少かいぐういたゆう不同ふどうてきじょうがた

さら詳細しょうさいてきせつ,UTF-8へん具有ぐゆう以下いかいくてんゆうてん

  • ASCIIUTF-8てきいちしゅうよしためいちじゅんASCIIくし也是いち合法ごうほうてきUTF-8くし所以ゆえん現存げんそんてきASCII文字もじ需要じゅよう轉換てんかんため傳統でんとうてき擴充かくじゅうASCIIもとしゅう設計せっけいてき軟件通常つうじょう以不けいおさむあらためある很少おさむあらため就能あずかUTF-8いちおこり使用しよう
  • 使用しよう標準ひょうじゅんてきめんむこうもとくみてきはいじょつねしきたいUTF-8はいじょしょうさんなまあずかもと於Unicodeだい碼點はいじょしょうどうてき結果けっか。(儘管這只ゆう有限ゆうげんてき有用ゆうようせいいんため在任ざいにんなん特定とくていげんある文化ぶんかふと可能かのうゆう仍可接受せつじゅてき文字もじ排列はいれつ順序じゅんじょ。)
  • UTF-8UTF-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 解析かいせきうつしとく很差(なみ且與とうぜん標準ひょうじゅんてき版本はんぽんあいよう),麼它接收せっしゅういたいち些偽 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)這樣てきかたかたまり文字もじ,它們だい需要じゅようさんもとぐみ

UTF-8てき生物せいぶつ

編輯へんしゅう

雖然標準ひょうじゅんただし許多きょたWindowsほどしき包括ほうかつWindows記事きじほんざいUTF-8へん碼的檔案てきひらきくび加入かにゅういち段位だんいもとぐみくしEF BB BF。這是もとぐみ順序じゅんじょ記號きごうU+FEFFてきUTF-8へん結果けっかたい於沒ゆうあずかよう處理しょりUTF-8てき文字もじ編輯へんしゅうかずりゅうらんかい顯示けんじなりISO-8859-1くし

Posix系統けいとう

編輯へんしゅう

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ほどしきげんざい通過つうかInputStreamReaderOutputStreamWriter讀取よみとうつしにゅうくしてき時候じこう支援しえん標準ひょうじゅんUTF-8。ただし,Java也支援しえん一種いっしゅ標準ひょうじゅんてき變體へんたいUTF-8,きょう對象たいしょうてき序列じょれつJava本地ほんじかいめんかずざいclass檔案ちゅうてき嵌入かんにゅう常數じょうすう使用しようてきmodified UTF-8

變種へんしゅ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)てきいちしゅ格式かくしき。而其系統けいとう包括ほうかつWindowsLinux使用しよう統一とういつ規範きはんてき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. ^ 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). 
  2. ^ 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... .
  3. ^ Pike, Rob; Thompson, Ken. Hello World or Καλημέρα κόσμε or こんにちは 世界せかい (PDF). Proceedings of the Winter 1993 USENIX Conference. 1993 [2019-11-23]. (原始げんし內容そん (PDF)於2017-10-11). 
  4. ^ 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. 
  5. ^ Usage Survey of Character Encodings broken down by Ranking. w3techs.com. [2019-11-23]. (原始げんし內容そん於2022-01-21) 英語えいご. 
  6. ^ Historical trends in the usage of character encodings. [2019-11-14]. 
  7. ^ UTF-8 Usage Statistics. BuiltWith. [2011-03-28]. (原始げんし內容そん於2021-12-07). 
  8. ^ Using International Characters in Internet Mail. Internet Mail Consortium. 1998-08-01 [2007-11-08]. (原始げんし內容そん於2007-10-26). 
  9. ^ Specifying the document's character encoding, HTML5.2, World Wide Web Consortium, 14 December 2017 [2018-06-03], (原始げんし內容そん於2019-06-13) 
  10. ^ 參考さんこうRFC 2277 section 3.1
  11. ^ Using International Characters in Internet Mail. 2007-10-26 [2018-07-27]. 原始げんし內容そん檔於2007-10-26. 
  12. ^ The Unicode Standard, Version 13.0, Chapter 3 (PDF). [2020-03-23]. (原始げんし內容そん (PDF)於2021-09-20). 
  13. ^ ISO 10646标准载页めん. [2020-03-23]. (原始げんし內容そん於2022-01-19). 
  14. ^ 14.0 14.1 UTF-8 and Unicode FAQ for Unix/Linux by Markus Kuhn. [2005-06-16]. (原始げんし內容そん於2018-09-24). 
  15. ^ 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). 
  16. ^ 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). 
  17. ^ 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). 
  18. ^ 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