piapia123
ja

UTF-8 バイトと各表記の対照

エンコード

処理はすべてブラウザ内で完結します。データは送信されません

入力
ファイルをここにドロップすると読み込めます
出力

ある文字列の各種表記を並べて表示します:UTF-8 バイト、Unicode コードポイント、URL で使うパーセントエンコーディング、HTML 実体参照(10進数と16進数)、そして JS / Java の `\u` エスケープです。これは変換ツールではありません —— 個別の変換には、このサイト内にもっと専門的なツールがあります(URL エンコード、HTML 実体参照、Unicode エスケープ)。ここが答えるのは別の問いです:同じ文字の複数の表記を並べて見比べる。プロトコルのデバッグ、他人の設定ファイルを読む、なぜか文字化けする原因を突き止める —— いずれもこれらの列を同時に必要とします。最終行では文字数とバイト数を意図的に分けています:この2つの数値が食い違うことこそが UTF-8 の働きであり、漢字は3バイト、emoji は4バイト、ASCII は1バイトを占めます。

機能

  • 6つの表記を一度に:バイト列・コードポイント・パーセントエンコーディング・2種類の実体参照・Unicode エスケープ
  • 行ごとに個別コピー可能 —— 長い文字列から手作業で範囲選択する必要がありません
  • コードポイント単位で分割するので、emoji が孤立したサロゲート2つに割れません
  • 基本多言語面外の文字はサロゲートペア(\ud83d\ude00)で出力し、設定ファイルにそのまま貼れます
  • 文字数とバイト数を別々に表示 —— UTF-8 の膨張が一目でわかります
  • すべてブラウザ内で完結し、内容がアップロードされることはありません

使い方

  1. 入力欄に文字列を貼り付けます
  2. 結果がリアルタイムで表示され、表記ごとに1行ずつ並びます
  3. その行のコピーボタンで、その値だけを取り出せます
  4. 全体が必要なときは「すべてコピー」を使います

よくある質問

文字数とバイト数が違うのはなぜですか?
UTF-8 が可変長符号化だからです:ASCII 文字(英数字と記号)は1バイト、ラテン拡張やギリシャ文字は2バイト、漢字などは3バイト、emoji や稀な文字は4バイトを占めます。つまり「こんにちは」は5文字で15バイト、「a中😀」は3文字で8バイトです。データベースの `varchar(10)` は文字数で数えるので漢字10文字でも入りますが、バイト単位で測る・切り詰めるフィールドなら3文字しか入りません —— そうした問題の出所がこの行です。
URL エンコードのツールとは何が違いますか?
パーセントエンコーディングの行は同じものですが、目的が異なります。url-encode は変換器で、「どの文字を符号化するか」「空白を + にするか %20 にするか」といった選択肢を持ち、出力そのものが答えです。こちらは対照表で、同じ内容の6つの表記を一度に並べます。変換したいときは専門のツールを、この文字列が実際に何なのかを見たいときはこちらを使ってください。
emoji のエスケープが2つに分かれるのはなぜですか?
😀 のコードポイント U+1F600 が基本多言語面(U+FFFF 超)にあり、JavaScript や Java が使う UTF-16 では1コード単位が16ビットしかないため収まらないからです。したがってサロゲートペア `\ud83d\ude00` として書く必要があります。より短い `\u{1F600}` という書き方もありますが、Java の properties ファイル、古い JSON パーサー、多くのテンプレートエンジンが受け付けません。本ツールがサロゲートペアを出力するのは、設定ファイルに貼って動くことが最も多い用途だからです。
HTML 実体参照が2種類あるのはなぜですか?
10進数の `中` と16進数の `中` は同じ文字を指し、ブラウザはどちらも解釈します。違いは慣習だけです:実際のソースでは両方見かけますし、古いエディタやテンプレートエンジンの中には片方しか受け付けないものもあります。両方を並べておけば、特定のツールに合わせて変換し直す手間が省けます。

関連ツール