Unicode 変換ツール
Unicode 変換・デコードツール。どの書き方で貼っても自動判別して読めるテキストに戻し、全表記を一度に出力。ゼロ幅などの不可視文字もあぶり出せます。ブラウザ内で完結し、入力は送信されません。
処理はすべてブラウザ内で実行されます。入力がアップロード・記録・保存されることはありません。
結果はここに表示されます すべての表記を一度に
| JavaScript / Java / JSON uXXXX | — | |
|---|---|---|
| ES6 u{XXXXX} | — | |
| Python uXXXX / UXXXXXXXX | — | |
| Go uXXXX / UXXXXXXXX | — | |
| Rust u{XXXXX} | — | |
| コードポイント U+XXXX | — | |
| HTML 10 進 &#NNNNN; | — | |
| HTML 16 進 &#xXXXX; | — | |
| URL エンコード %XX | — | |
| CSS XXXXXX | — | |
| UTF-8 バイト hex | — | |
| UTF-16 コードユニット hex | — | |
| UTF-32 hex | — | |
| 8 進バイト NNN | — | |
| 10 進コードポイント NNNNN | — |
1 文字ずつ
| 文字 | コードポイント | UTF-8 | UTF-16 | 用字系 | カテゴリ | 名前 |
|---|---|---|---|---|---|---|
| 結果はここに表示されます | ||||||
クイックリファレンス
| 文字 | コードポイント | JavaScript / Java / JSON | UTF-8 バイト | URL エンコード | HTML 10 進 |
|---|---|---|---|---|---|
| 中文 | U+4E2D U+6587 | \u4E2D\u6587 | E4 B8 AD E6 96 87 | %E4%B8%AD%E6%96%87 | 中文 |
| 😀 | U+1F600 | \uD83D\uDE00 | F0 9F 98 80 | %F0%9F%98%80 | 😀 |
| A | U+0041 | A | 41 | A | A |
| ␣ U+3000 | U+3000 | \u3000 | E3 80 80 | %E3%80%80 |   |
挙動はドキュメントからの推測ではなく、Node、Python、Java、Go と実際のブラウザエンジンで検証しています。
Unicode エスケープとは?
Unicode エスケープは、ASCII だけを使って 1 つの文字を書き表す方法です。文字そのものを運べないシステムを通り抜けさせるために使います。同じ文字でも、書き方は言語ごとにほぼ別物です。JavaScript と JSON は UTF-16 コードユニットごとに 16 進数 4 桁、ES6 と Rust は波括弧にコードポイントをそのまま入れ、Python と Go には 8 桁のワイド形式があり、CSS はバックスラッシュ 1 つで始め、HTML には数値参照と名前付き参照が別にあります。指しているコードポイントはどれも同じです。1 つのテキストが何通りもの姿であなたの手元に届くのは、これが理由です。
中文
U+4E2D U+6587 code point
\u4E2D\u6587 JavaScript / Java / JSON
\u{4E2D}\u{6587} ES6 / Rust
E4 B8 AD E6 96 87 UTF-8
%E4%B8%AD%E6%96%87 URL
中文 HTML このコンバーターでできること
どの表記かを自動で判別
エスケープ、波括弧記法、ワイドエスケープ、コードポイント、実体参照、パーセントエンコーディング、バイト列。貼り付ければそのまま判別するので、モードの切り替えは要りません。
混ざった内容を壊さない
変わるのはエンコードされた部分だけです。JSON の記号、Windows のパス、すでにエスケープ済みのバックスラッシュはそのまま残ります。
すべての表記を一度に出力
1 回貼り付ければ対応表が丸ごと出ます。ある言語から別の言語へ移すために 2 回変換する必要はありません。
言語ごとに正しい形式で
BMP の外にある文字は、Python と Go 向けにはワイドエスケープで出力します。この 2 つの言語にサロゲートペアを渡すと失敗するためです。
1 文字ずつ調べられる
各文字のコードポイント、UTF-8 と UTF-16 のバイト、用字系、カテゴリを表示します。Unicode 名が決まっている文字には、その名前も出ます。
不可視文字を見えるようにする
BOM、ゼロ幅接合子、ノーブレークスペースが目に見える代替表示になります。
Unicode 変換の例
ログ行をまるごと貼り付けても、変わるのはエスケープ部分だけ
{"msg":"\u4e2d\u6587 failed","code":500} {"msg":"中文 failed","code":500} 引用符もキー名も数値もそのまま残ります。エスケープ部分を手で抜き出す必要はないので、ログ 1 行をそのまま貼り付けて構いません。
1 回の貼り付けに 4 種類の表記が混ざっていても大丈夫
U+4E2D \u{1F600} 中 \ud83d\ude00 中 😀 中 😀
コードポイント表記、ES6 の波括弧エスケープ、HTML の実体参照、サロゲートペア。この 4 種類が 1 回の処理でまとめてデコードされます。事前にモードを選ぶ必要も、設定を変える必要もありません。
1 文字を、各言語それぞれの書き方で
中
\u4E2D JavaScript / Java / JSON
\u{4E2D} ES6 / Rust
U+4E2D code point
E4 B8 AD UTF-8
\344\270\255 octal 同じ文字が、それぞれの言語の期待する形で並びます。BMP の外にある文字については Python と Go は 8 桁のワイドエスケープが必須で、サロゲートペアで書くと Go はコンパイルが通らず、Python は UnicodeEncodeError になります。
Unicode 変換ツールの使い方
- 1
貼り付ける
エスケープ、コードポイント、実体参照、エンコード済みバイト、プレーンテキスト、どれでも構いません。どの形式かを先に指定する必要はありません。
- 2
結果を読む
読めるテキストがすぐに表示され、どの表記が認識されたかも併せて示されます。
- 3
必要な形式をコピーする
結果の下にすべての表記が並び、各行にコピーボタンが付いています。
- 4
おかしいと思ったら分解する
1 文字ずつの表を開いてコードポイント、バイト、用字系、名前を確認し、「不可視文字を表示」で隠れた文字をあぶり出します。
知っておきたい落とし穴
ワイドエスケープが必要な場所にサロゲートペアを書いてしまう
JSON では問題なく通るペアが、Python では壊れた半分が 2 つになり、Go ではコンパイルが通りません。U+FFFF より上の文字には 8 桁のワイド形式を使ってください。
\ud83d\ude00
\U0001F600
HTML の数値参照をただのコードポイントとしてデコードする
128 から 159 の間の参照は windows-1252 経由で読む必要があります。素直に実装すると右シングルクォーテーションマークが不可視の制御文字に化けます。古いシステムが書き出したデータで、その位置だけ何も表示されないのは、たいていこれが原因です。
’ -> U+0092
’ -> U+2019
短い CSS エスケープの直後に 16 進文字を置く
パーサーは 16 進数を読める限り読み進めるので、エスケープと次の文字が 1 つの誤ったコードポイントに合体します。6 桁まで埋めれば解決します。
\4E2Da
\004E2Da
Unicode 変換が必要になる場面
- ログを読む
- サーバーログや API レスポンスは、非 ASCII がエスケープされた状態で届くことがよくあります。行をそのまま貼り付ければ、編集せずに読めます。
- 言語をまたいで文字列を移す
- 移行先の言語が受け付ける形式をそのままコピーできます。サロゲートペアとワイドエスケープの間を手で換算する必要はありません。
- エンコードのバグを追う
- 比較が失敗したときやデータベースが値を弾いたとき、1 文字ずつの表がどのコードポイントとバイトが絡んでいるかを見せてくれます。
- 貼り付けたテキストを掃除する
- Web ページやドキュメントからコピーしたテキストには、不可視文字が紛れ込みがちです。本番に届く前に見つけてください。
Unicode エスケープの技術的な詳細
- エスケープしているのは文字ではなくコードユニット
- JavaScript、Java、JSON がエスケープするのは UTF-16 コードユニットなので、U+FFFF より上の文字にはエスケープが 2 つ必要です。Python と Go にはコードポイントをそのまま収める 8 桁形式が用意されています。
- HTML の数値参照は再マッピングされる
- HTML 仕様は、128 から 159 の範囲の数値参照をコードポイントとしてではなく windows-1252 経由で解釈するよう求めています。そのため 146 は不可視の制御文字ではなく、右シングルクォーテーションマークになります。
- CSS のエスケープは桁を埋める必要がある
- CSS のエスケープは 16 進数を最大 6 桁まで読み取ります。短いエスケープの直後に 16 進文字が続くと、1 つの誤ったコードポイントに合体してしまいます。6 桁まで埋めれば曖昧さは消え、後ろに空白を 1 つ置くとそれが終端として消費されます。
- 対になっていないサロゲートは行き先ごとに結末が違う
- JSON のシリアライズは保持し、TextEncoder は黙って置き換え、パーセントエンコーディングはエラーになり、Java はクエスチョンマークとして書き出し、Python は例外を投げます。
Unicode を扱うときのベストプラクティス
- 比較の前に正規化する
- 比較や重複排除の前に、両方を同じ正規化形式にそろえてください。人名や識別子では特に重要です。
- Python と Go にはワイド形式を使う
- サロゲートペアは JSON では有効ですが、この 2 つの言語では壊れます。出力先が Python か Go のソースなら、U+FFFF より上の文字は 8 桁エスケープにしてください。
- 不可視文字は早い段階で確認する
- 後から不一致をデバッグするのではなく、入力を受け取る境界で貼り付けられた内容を検証してください。
- 元の値を残しておく
- 置換文字が現れてしまうと、デコードは必ずしも可逆ではなくなります。確認が取れるまで生の値は取っておいてください。
Unicode 変換ツール FAQ
\u4e2d\u6587 はどういう意味ですか?どうすれば読めますか?
バックスラッシュが消えて u4e2d だけ残っています。これでも変換できますか?
絵文字 1 つがなぜ \u エスケープ 2 つになるのですか?
テキストから Unicode エスケープへの変換はどうやりますか?
見た目が同じ 2 つの文字列を、プログラムが別物だと言います。なぜですか?
文字列に紛れ込んだ見えない文字が原因でエラーになります。どうやって見つけますか?
貼り付けたデータはどこかにアップロードされますか?
関連ツール
すべてのツールを見る →Base64エンコーダー&デコーダー
エンコーディングとフォーマット
Base64のデコード・エンコードが無料でオンラインで行えます。リアルタイム変換、UTF-8・絵文字対応。100%ブラウザ上で動作しデータは外部に送信されません。登録不要。
Base64 画像変換ツール
エンコーディングとフォーマット
Base64 文字列やデータURIをブラウザ上で画像に戻します。プレビューし、寸法と MIME を確認して、PNG・JPG・GIF・SVG としてダウンロード。アップロード不要。
CSV to JSON 変換ツール
エンコーディングとフォーマット
CSVをブラウザ内で即座にJSONに変換。RFC 4180・型推論・ヘッダー行・大整数安全対応。100%プライベート、アップロード不要。
.env から JSON への変換ツール
エンコーディングとフォーマット
.env ファイルを貼り付けるだけで即座に JSON に変換。データベースのパスワードや API キー、トークンはブラウザから一切出ません。100% プライベート、アップロード不要、無料の dotenv パーサー。
無料HTMLエンティティデコーダー — HTMLをアンエスケープ
エンコーディングとフォーマット
HTMLエンティティをデコードし、HTMLをオンラインでアンエスケープ。無料・登録不要・100%ブラウザ内処理。名前付き・10進・16進の参照を文字に戻します。アップロードは一切なし。
無料HTMLエンティティエンコーダー — HTMLをエスケープ
エンコーディングとフォーマット
HTMLエンティティをエンコードし、特殊文字(< > & " ')をオンラインでエスケープ。無料・登録不要・100%ブラウザ内処理。名前付き・10進・16進の出力に対応、アップロードは一切なし。