解説

上のUTF-8文字コード表で,

文字に割り当てた通し番号を「文字コード」といいます。Unicodeとは,世界中のあらゆる文字のコードを決めた統一規約です。例えば,Aのコードは10進数で65,2進数で0100000116進数で0x41です。

UTF-8とは,Unicodeをコンピュータで使いやすいように変換したコードです。ASCII文字は1バイトで表され,Unicodeと同じ,その他の文字は2~4バイトで表されます(可変長バイト)。上の表のUTF-8の桁数/2がバイト数です。漢字やひらがななど,主な日本語文字は3バイトで表されます。

UTF-8では,コードのバイト数を先頭のビットで区別できるようになっています。

そして,同じUnicodeは最小バイトのUTF-8で表す規約に基づいて,

を表します。これより,UTF-8を変数v,Unicodeを変数uとすると,

v = (2ⁿ-1)×2⁷ⁿ⁺⁷-2⁶(2-¹u₆)[n=0] + (2⁷+⁶u)+(2⁷+⁶u₆)×2⁸+…+(2⁷+u₆)×2⁸ⁿ

u =  ¹v₆×2⁶[n=0] + ⁶⁻ⁿv₈ₙ×2⁶ⁿ + (⁶v₀+⁶v₈×2⁶+…+⁶v₈ₙ₋₈×2⁶ⁿ⁻⁶)

と表されます。ここで,n=[(log₂u-1)/5][2⁷≦u]=[log₂v/8]はUTF-8のバイト数-1,w=[w/2]%2はw=u,vの第n+1~n+iビット,%は剰余,[ ]は数値の整数部分,または,真なら1偽なら0(アイバーソンの記法)を表します。導出とu-v変換器はここ❐

なお,vがUTF-8の必要条件を満たすか否かは,以下の不等式で判定できます(カンマはAND):

( n=0, v<2⁷ ) OR ( 0<n<4, 0≤⁸v₈ₙ-2⁸+2⁷⁻ⁿ<2⁶⁻ⁿ, 0≤⁸v₈ₖ-2⁷<2⁶ for k=0,...,n-1,  0xC280[n=1]+0xE0A080[n=2]+0xF0908080[n=3]≤v )

HTMLにおけるUnicodeの表示

HTMLで文字コードを指定して,文字を表示するには,

&#15181455

のように&#に続けて10進数で文字コードとセミコロン書きます。または,

&#xE7A68F; 

のように,&#xに続けると16進数で指定できます。文字コードはmetaタグのcharset=で指定したもので,通常UTF-8です。

JavascriptにおけるUnicodeの表示と取得

Javascriptでは,String.fromCodePoint(n₁, n₂, ...)関数でUnicode n₁, n₂, ...を指定して文字列を得ることができます。(例)Unicode 15181455の文字を表示:

String.fromCodePoint(15181455);

また,String.codePointAt(n)関数で,文字列のn+1番目の文字のUnicodeを得ることができます。(例)文字列”福田”の先頭文字のUnicodeを得る:

"福田".codePointAt(0);

文字化け

文字コードはUTF-8に統一されつつありますが,歴史的には色々な文字コードが使われてきました。 Windowsで使われるSHIFT-JIS,電子メールで使われるJISなどです。 もし,書き込みに使う文字コードと,読みだしに使う文字コードが違うと,文字が正しく表示されない,文字化けを起こします。