ログに 0xE3 だけが出ていて、何の文字なのか分からない。 見た目は空白なのに、スペースで区切っても分かれてくれない。 同じ「あ」のはずなのに、UTF-8 と UTF-16 で並ぶ数字が違う。 このツールは、貼り付けた文字を1文字ずつ分解してコードポイント・UTF-8 バイト・UTF-16 コード単位を表にし、逆にコードやバイト列から文字へ戻すこともできます。
使い方
- 上の欄に調べたい文字列を貼り付けます。1文字が1行になり、コードポイント(U+3042 の形)、10進、UTF-8 バイト、UTF-16、種別が並びます。
- 最初から入っている例文には、半角スペース・NBSP・全角スペース・ゼロ幅スペースが混ざっています。見た目が同じで中身が違う文字は、行に色が付きます。
ここまでが文字からコードへの向きです。次が逆向きです。
- 「コード → 文字に復元」の欄には、1行に1件ずつ入力します。
U+3042、\u{1F600}、あ、0xE3 0x81 0x82のような形式を行ごとに自動で判定します。
下には ASCII コード表(0〜127)もあり、制御文字の略称と意味を確認できます。
16進のバイト列は1バイトずつ区切って入れます。e3 80 80 やカンマ区切りでも読めました。e38080 のような区切りなしや、<0xe3><0x80><0x80> のような山括弧つきは、バイト列として読まれず文字列扱いになりました。山括弧を外してスペースで区切ってから貼り付けてください。
仕組み・計算式
ASCII は 7 ビットで 0〜127 の 128 文字を表す規格です(ANSI X3.4、国際規格では ISO 646)。0〜31 と 127 が制御文字、32 が空白、33〜126 が印字できる文字です。Unicode の U+0000〜U+007F は ASCII と同じ並びなので、英数字は ASCII の値がそのままコードポイントになります。
Unicode は文字に番号(コードポイント)を割り当てる仕組みで、The Unicode Standard が定義しています。番号の範囲は U+0000〜U+10FFFF です。この番号をバイト列にするのが符号化方式で、ツールの表には UTF-8 と UTF-16 を出しています。
UTF-8(RFC 3629)は、コードポイントの大きさで1〜4バイトを使い分けます。
- U+0000〜U+007F は1バイトで、ASCII と同じ値です。
- U+0080〜U+07FF は2バイトで、先頭が
110xxxxx、続きが10xxxxxxです。
ここから先に日本語の文字が入ります。
- U+0800〜U+FFFF は3バイトで、先頭が
1110xxxx、続きが10xxxxxx×2 です。 - U+10000〜U+10FFFF は4バイトで、先頭が
11110xxx、続きが10xxxxxx×3 です。
先頭バイトの上位ビットで文字のバイト数が決まり、続きのバイトは 10 で始まります。3バイト文字の先頭は 0xE0〜0xEF で、ひらがな・カタカナ・全角記号の先頭が 0xE3 になるのはこの範囲だからです。
UTF-16(RFC 2781)は、U+FFFF 以下の文字を16ビット1つで表し、コードポイントがそのままコード単位になります。U+10000 以上はサロゲートペア(2コード単位)にします。まず 0x10000 を引きます。残りの上位10ビットに 0xD800 を足すと前半(上位サロゲート)、下位10ビットに 0xDC00 を足すと後半(下位サロゲート)です。
JavaScript の文字列は UTF-16 のコード単位で数えるため、サロゲートペアの文字は length が 2 になります。ツールは Array.from() で分割し、TextEncoder で UTF-8 を取り出します。
計算例
次の値は手計算とあわせて、Node.js(Buffer、TextEncoder、codePointAt)でも確かめました。
例1 「あ」(U+3042)
2進数にすると 0011 0000 0100 0010 です。3バイトの型 1110xxxx 10xxxxxx 10xxxxxx に上から詰めると 11100011 10000001 10000010、16進で E3 81 82 になります。UTF-16 は U+3042 の1コード単位です。
例2 全角スペース(U+3000)
0011 0000 0000 0000 を同じ型に詰めると E3 80 80 です。先頭の E3 は「あ」と同じです。冒頭の <0xe3><0x80><0x80> は、山括弧を外して 0xe3 0x80 0x80 にして復元欄に入れると、全角スペース1文字に戻りました。
例3 「𠮷」(U+20BB7) 境界値の例です。U+FFFF を超えるので、UTF-8 は4バイトで F0 A0 AE B7 です。UTF-16 は 0x20BB7 − 0x10000 = 0x10BB7 から、上位10ビット 0x42 と下位10ビット 0x3B7 を取り出します。0xD800 + 0x42 = D842、0xDC00 + 0x3B7 = DFB7 で、サロゲートペアは D842 DFB7 です。
正直なところ、サロゲートの計算は紙に書かないと途中で迷います。ツールに貼って答え合わせするほうが速いです。
よくある間違い
1. NBSP(U+00A0)を普通のスペース(U+0020)と同じだと思う
見た目は同じでも別の文字です。UTF-8 では普通のスペースが 20 の1バイト、NBSP が C2 A0 の2バイトです。"A B" と "A B" を比べると、=== は false で、バイト数は 4 と 3 でした。split(" ") でも NBSP の入った文字列は分かれません。
Web ページからのコピーで紛れ込みやすいです。貼り付けて、種別に「改行禁止スペース(NBSP)」と出るか見てください。JavaScript の正規表現 \s は NBSP と全角スペースには一致しましたが、ゼロ幅スペース(U+200B)には一致しませんでした。
2. 文字数・コードポイント数・バイト数を同じものとして数える
"A𠮷あ" で確かめると、JavaScript の length は 4、コードポイント数は 3、UTF-8 のバイト数は 8 でした。3つとも違います。「𠮷」が UTF-16 では2コード単位、UTF-8 では4バイトを使うからです。
文字数制限や列長で数えがずれたとき、どの単位で数えているか確認しましたか? ツールの表は1行が1コードポイントで、UTF-16 の列に「(サロゲートペア)」が付くかどうかで見分けられます。
3. 0xE3 だけで文字が決まると思う
0xE3 は UTF-8 の「3バイト文字の先頭」を示すだけで、単独では文字になりません。復元欄に 0xE3 だけを入れると「UTF-8バイト列として不正です」と表示されました。続きの2バイトが揃って初めて、E3 81 82 なら「あ」、E3 80 80 なら全角スペースになります。ログの途中でバイト列が切れていないか見てください。
よくある質問
Q. 「0xe3」で検索しました。これは何の文字ですか?
A. 0xE3 は UTF-8 で3バイト文字の先頭バイトです。1バイトだけでは文字を特定できません。続きの2バイトとセットで、ひらがな・カタカナ・全角記号などになります。続きが分かるなら、スペース区切りで復元欄に貼ってください。
Q. 「00a0」は何の文字コードですか?
A. U+00A0、NBSP(改行禁止スペース)です。10進では 160、UTF-8 では C2 A0、UTF-16 では 00A0 です。HTML では として書かれることがあります。復元欄では 00a0 だけだと文字列として扱われたので、U+00A0 と書くと NBSP に戻せます。
Q. UTF-16 のコード表はどこにありますか?
A. UTF-16 の列は、貼り付けた文字ごとに表示されます。U+FFFF 以下はコードポイントと同じ値で、それより大きい文字はサロゲートペアの2つの値です。
Q. Unicode の文字一覧(Unicode 表)は見られますか?
A. 全コードポイントの一覧表は用意していません。常に表示しているのは ASCII の 0〜127 だけです。調べたい文字を貼るか、U+3042 のように番号を入れて確かめてください。全体の割り当ては The Unicode Standard の文字データベースが元になります。
関連ツール
最終更新・根拠の確認日: 2026-10-05 · カテゴリ: テキスト