文字を貼り付けると、1文字ずつUnicodeのコードポイント、UTF-8・UTF-16・Shift_JISのバイト列を表示します。絵文字の分解、見えない文字や機種依存文字の検出、コードから文字への逆変換もできます。処理はすべてブラウザの中だけで行います。
上の枠は、見えない文字・空白・改行に印を付けた表示です。
| 文字 | 構成 | コードポイント | 種類 | UTF-8 | UTF-16 | Shift_JIS | HTML |
|---|
コンピューターの中では、文字はすべて番号(文字コード)で扱われます。このツールは、入力した文字の番号を1文字ずつ表にします。世界共通の番号であるUnicodeのコードポイント(「あ」なら U+3042)と、それを保存・通信するときのバイト列(UTF-8・UTF-16、日本の古い形式のShift_JIS)を並べて見られます。
「見た目は同じなのに検索に引っかからない」「CSVを読み込むと1列目の名前がおかしい」「Macから届いたファイル名の濁点が離れる」「Windowsの古いシステムで文字化けする」といった原因の多くは、目に見えない文字や、見た目が同じ別の文字です。表の「種類」の欄と、上の注意の一覧で、そうした文字を見つけられます。絵文字は、見た目は1文字でも中身が何個の文字でできているかを分解して表示します。
「1文字」には3つの数え方がある:👨👩👧 は見た目は1文字ですが、👨・👩・👧 の3つを「ゼロ幅接合子(ZWJ、U+200D)」2つでつないだ5個のコードポイントでできています。JavaScriptの length はUTF-16の単位で数えるので8、UTF-8では18バイトです。国旗の🇯🇵は「J」「P」に当たる地域指示記号2個、👍🏽は親指の絵文字と肌の色の修飾子の2個です。文字数の上限があるフォームやデータベースでは、どの数え方かで結果が変わります。
UTF-8のバイト数の目安:英数字は1バイト、ラテン文字のアクセント付きやギリシャ文字などは2バイト、ひらがな・カタカナ・ほとんどの漢字は3バイト、絵文字や「𠮷」のような拡張漢字(U+20000以降)は4バイトです。MySQLの古い文字コード utf8(utf8mb3)は3バイトまでしか保存できないので、4バイトの文字を入れると切れたりエラーになったりします。
見えない文字:Webページからコピーした文章には、ゼロ幅スペース(U+200B)やノーブレークスペース(U+00A0)が混ざることがあります。ExcelがUTF-8で保存したCSVの先頭にはBOM(U+FEFF)が付き、プログラムによっては1列目の見出しの一部として読まれます。どれも画面では見えないので、「同じ文字列のはずなのに一致しない」原因になります。
濁点の分離(NFC と NFD):「が」は1文字(U+304C)でも、「か」(U+304B)+結合用の濁点(U+3099)の2文字でも表せます。macOSはファイル名を後者(NFD)で保存することがあり、Windowsに渡すと「か゛」のように離れて見えます。NFCに正規化すると1文字にまとまります。NFKCはさらに、全角英数を半角に、半角カナを全角に、「㈱」を「(株)」にそろえますが、元の文字の区別が消えるので使いどころに注意が必要です。
Shift_JISと機種依存文字:Shift_JISで表せるのは、JIS第1・第2水準の漢字と記号、半角カナなどに限られます。「①」「㈱」などのNEC特殊文字や、「髙」「﨑」などのIBM拡張文字はWindowsでは使えても、ほかの環境では文字化けしやすい「機種依存文字」です。「𠮷」(つちよし)や多くの絵文字はShift_JISにそもそもありません。このツールのShift_JISは、ブラウザが使うWHATWGの対応表(Windowsのcp932とほぼ同じ)で変換しています。
見た目が同じ別の文字:波ダッシュ「〜」(U+301C)と全角チルダ「~」(U+FF5E)、マイナス記号「−」(U+2212)と全角ハイフンマイナス「-」(U+FF0D)、長音「ー」(U+30FC)と罫線「─」(U+2500)などは、フォントによってはほぼ同じに見えます。住所や商品名の検索が合わないときは、コードポイントを比べてみてください。