🔡 文字コード・バイト列ビューア

入力したテキストを1文字ずつ解析し、コードポイント(U+XXXX)・UTF-8のバイト列・UTF-16のコード単位を16進数で並べて表示します。文字数・UTF-8バイト長・パーセントエンコードもまとめて確認でき、絵文字などのサロゲートペアも正しく1文字として扱います。

入力

日本語・英数字・記号・絵文字をそのまま入力できます。すべての解析は端末内(ブラウザ内)で行い、入力内容はどこにも送信されません。

サマリ

パーセントエンコード(encodeURIComponent)

絵文字や一部の記号は複数のコードポイントの組み合わせ(書記素クラスタ)で表される場合があり、「見た目の1文字」と「コードポイント数」が一致しないことがあります。

1文字ずつの内訳

文字 コードポイント UTF-8バイト(16進) UTF-16コード単位(16進)

解説

文字コード・バイト列ビューアは、入力したテキストが内部でどのような数値の並びとして表されているかを可視化するツールです。私たちが画面で見る「文字」は、コンピュータの中では番号(コードポイント)と、それを保存・送信するためのバイト列に変換されています。本ツールは、1文字ごとにその番号とバイト列を16進数で並べて表示し、文字数・UTF-8バイト長・UTF-16コード単位数といった全体の集計も同時に確認できます。

Unicodeでは、すべての文字に「コードポイント」と呼ばれる一意の番号が割り当てられています。表記は U+ に続けて16進数を書き、例えば「A」は U+0041、「あ」は U+3042 です。このコードポイントを実際のバイト列に変換する方式(符号化方式)が UTF-8 や UTF-16 で、同じ「あ」でも UTF-8 では3バイト(E3 81 82)、UTF-16 では2バイト(1コード単位 3042)と、方式によってバイト数も並びも変わります。

絵文字や一部の文字は、コードポイントが U+FFFF を超える範囲にあります。JavaScriptの文字列はUTF-16を基礎にしているため、こうした文字は「サロゲートペア」と呼ばれる2つのコード単位で表されます。本ツールは codePointAt とスプレッド構文で文字列を走査し、サロゲートペアを正しく1つの文字(1コードポイント)として扱うため、寿司の絵文字「🍣」も U+1F363・UTF-8=4バイト(F0 9F 8D A3)・UTF-16=2コード単位(D83C DF63)として正確に表示します。

UTF-8への変換には標準の TextEncoder を、コードポイントの取得には codePointAt を、UTF-16コード単位の取得には charCodeAt を用いています。なお標準の TextEncoder は UTF-8 のみをサポートするため、Shift-JIS(cp932)などのレガシー符号化には対応していません。文字数の数え方には「見た目の文字(書記素)」「コードポイント」「UTF-16コード単位」の3通りがあり、絵文字や合成文字ではこれらが食い違うことがあります。本ツールの「文字数」はコードポイント数を指す点にご注意ください。すべての処理は端末内で行い、入力内容は送信されません。

よくある質問

文字コードとバイトの違いは何ですか?

「文字コード(コードポイント)」は各文字に割り当てられた番号そのもので、「A」なら U+0041 という抽象的な値です。「バイト」は、その番号を保存・通信するために符号化方式(UTF-8など)で実際のデータに変換した結果です。同じコードポイントでも、UTF-8とUTF-16では出てくるバイト列が異なります。

UTF-8とUTF-16はどう違いますか?

どちらもUnicodeの符号化方式です。UTF-8はASCII文字を1バイト、日本語などを3バイト前後で表す可変長方式で、Webやファイルの標準として広く使われます。UTF-16は多くの文字を2バイト(1コード単位)で表し、絵文字などはサロゲートペアで4バイト(2コード単位)になります。JavaScriptの文字列内部はUTF-16が基礎です。

コードポイントとサロゲートペアとは?

コードポイントは文字1つに対応するUnicodeの番号です。UTF-16では U+FFFF までを1つのコード単位で表しますが、それを超える文字(多くの絵文字など)は2つのコード単位の組み=サロゲートペアで表現します。見た目は1文字でもUTF-16では2コード単位になるため、単純な文字列長では2と数えられることがあります。

なぜShift-JISには対応していないのですか?

本ツールはブラウザ標準の TextEncoder を使ってバイト列を求めていますが、この標準APIはUTF-8への符号化のみをサポートし、Shift-JIS(cp932)などのレガシー符号化には対応していません(追加ライブラリなしでは変換できません)。外部ライブラリやサーバー送信を使わない完全静的の方針のため、Shift-JISは扱わずUTF-8とUTF-16に絞っています。

「文字数」は何を数えていますか?

コードポイント数を数えています(スプレッド構文 [...str].length 相当)。絵文字の合成(肌の色や国旗など複数コードポイントで1つの見た目になるもの)では、見た目の文字数より多く数えられる場合があります。UTF-16コード単位数(str.length)とも異なることがあるため、3つの数値を併記しています。

パーセントエンコードは何に使えますか?

URLのクエリ文字列などに日本語や記号を安全に埋め込むための表記です。本ツールでは encodeURIComponent の結果を表示します。内部的には各文字のUTF-8バイトを %XX の形式で並べたものになるため、内訳表のUTF-8バイト列と対応関係を確かめられます。

どんなときに使うと便利ですか?

文字化けの原因調査、DBのカラムに入る「バイト数」の見積もり、ファイルやAPIで想定外のバイト列が出る問題の切り分け、絵文字が2文字分としてカウントされる不具合の確認などに役立ちます。UTF-8のバイト長は、バイト単位で長さ制限のある項目の設計時にも便利です。

入力した文字はサーバーに送られますか?

送られません。解析はすべてブラウザ内で完結し、入力内容はどこにも送信されません。オフラインでも利用できます。