本文へスキップ
App Museum
English

Unicodeエスケープ変換ツール

日本語や絵文字を \u3042 のようなUnicodeエスケープに変換し、\uXXXX・\u{...}・\UXXXXXXXX を元の文字に戻します。JSON・Java・JavaScript・Pythonの書き方に対応し、ゼロ幅スペースなどの見えない文字や紛らわしい空白だけをエスケープして見つけることもできます。

変換の向き
エスケープの設定
エスケープする文字
エスケープの書き方

テキストを入力すると、変換した結果と置き換えた数がここに表示されます。

使い方

  1. 「変換の向き」で、エスケープかアンエスケープを選びます
  2. 上の欄にテキストを入力するか、貼り付けます
  3. エスケープのときは、必要に応じて「エスケープの設定」で、エスケープする文字と書き方を選びます
  4. 「結果」に変換したテキストが表示されます。「結果をコピー」を押すとクリップボードに入ります

実行ボタンはなく、入力や設定を変えるたびに結果が変わります。結果の下には、置き換えた文字の数、または文字に戻したエスケープの数が表示されます。

「結果を入力に移して逆変換」を押すと、結果が入力欄に移り、変換の向きが反対になります。エスケープした結果が元のテキストに戻ることを、その場で確かめられます。

Unicodeエスケープとは

Unicodeエスケープは、文字をそのまま書く代わりに、その文字のUnicodeの番号(コードポイント)を16進数で書く方法です。たとえば あ の番号はU+3042なので、\u3042 と書きます。

ASCII(半角の英数字と基本の記号)だけで書けるため、次のような場面で使われます。

  • JSONを出力するライブラリが、日本語を \u65e5\u672c\u8a9e のように書き出す(PHPの json_encode やPythonの json.dumps の最初の設定)
  • Javaの .properties ファイルに日本語を書く
  • ソースコードの文字列に、見た目で区別しにくい文字や絵文字を書く
  • ログやAPIのレスポンスに、エスケープされた日本語が出てくる

このアプリは、こうした文字列を読める形に戻すこと、反対に手元のテキストをエスケープした形にすることができます。

具体例

APIのレスポンスに、次のような文字列が入っていたとします。

{"message":"\u4fdd\u5b58\u3057\u307e\u3057\u305f"}

変換の向きを「アンエスケープ」にして貼り付けると、結果は次のようになります。

{"message":"保存しました"}

下には「6件のエスケープを文字に戻しました。」と表示されます。エスケープ以外の部分({、"、message など)は変更しません。

反対に、「エスケープ」で こんにちは😀 を入力すると、最初の設定では次の結果になります。

\u3053\u3093\u306b\u3061\u306f\ud83d\ude00

下には「6文字をエスケープに置き換えました。」と表示されます。絵文字の 😀 が \ud83d\ude00 の2つになる理由は、次の「エスケープの書き方」で説明します。

エスケープの設定

エスケープする文字

どの文字をエスケープに置き換えるかを、3つから選べます。

  • ASCII以外の文字: 最初の設定です。半角の英数字、記号、空白、タブ、改行(U+0000からU+007F)はそのまま残し、それ以外の文字をエスケープします
  • 見えない文字と紛らわしい空白だけ: 画面では見えない文字と、半角スペースと見分けにくい空白だけをエスケープします。日本語、半角の英数字と記号、半角スペース、タブ、改行はそのまま残ります。対象になる文字は、次の「見えない文字と紛らわしい空白」で説明します
  • すべての文字: ASCIIの文字も含めて、すべての文字をエスケープします。a は \u0061、改行は \u000a になるので、結果は改行のない1行になります。文字列の中身を番号だけで確かめたいときや、\ を含むテキストを確実に元へ戻せる形にしたいとき(「注意すること」を参照)に使います

エスケープした結果を、ソースコードの文字列リテラルに貼り付けるときは、次の2点に注意してください。

  • Javaは、ソースコードを読む最初の段階で \uXXXX を文字に置き換えます。そのため、文字列リテラルの中に \u000a(改行)や \u0022(")があると、そこで行や文字列が終わったものとして扱われ、コンパイルエラーになります。Javaでは改行は \n、" は \" と書きます。改行や " がエスケープされるのは、「すべての文字」を選んだときだけです
  • CとC++には、\u0061 のようにU+00A0より小さい番号をこの書き方で書けない版があります(C11やC17では、$、@、` の3文字だけが例外です)。「すべての文字」のほか、「ASCII以外の文字」でもU+0080からU+009Fの制御文字が、「見えない文字と紛らわしい空白だけ」ではそれに加えてタブ、改行、復帰以外のU+0000からU+001Fの制御文字とU+007Fが、この範囲に入ります

見えない文字と紛らわしい空白

コピーしたテキストに、目に見えない文字が紛れ込んでいることがあります。見た目は同じなのに文字列の比較や検索が一致しない、JSONやCSVの読み込みがエラーになる、といったときの原因になりがちです。

「見えない文字と紛らわしい空白だけ」を選ぶと、こうした文字だけが番号になるので、どこに何が入っているかがわかります。たとえば、保存 と しました の間にゼロ幅スペースが入ったテキストは、次の結果になります。

保存\u200bしました

下には「1文字をエスケープに置き換えました(見えない文字や紛らわしい空白)。」と表示されます。1つも無いときは「見えない文字や紛らわしい空白はありませんでした。」と表示されます。

対象になるのは次の文字です。

  • 半角スペース(U+0020)以外の空白: ノーブレークスペース(U+00A0)、全角スペース(U+3000)、U+2000からU+200Aの幅の違う空白など。点字の空白(U+2800)も、多くのフォントで空白に見えるため含めます
  • 幅がなく表示されない文字: ゼロ幅スペース(U+200B)、ゼロ幅接合子(U+200D)、ワードジョイナー(U+2060)、BOM(U+FEFF)、ソフトハイフン(U+00AD)、文字の並ぶ向きを変える制御文字(U+202Eなど)、ハングルのフィラー(U+3164)など
  • タブ、改行(LF)、復帰(CR)以外の制御文字: U+0000、U+007F、U+0085など
  • 行区切り(U+2028)と段落区切り(U+2029)
  • 対になっていないサロゲート(「注意すること」を参照)

タブ、改行、復帰、半角スペースは、テキストの形を作る文字なのでそのまま残します。異体字セレクタ(U+FE0Fなど)も残します。❤️ のように、直前の文字の見た目を選ぶための文字だからです。

絵文字の中のゼロ幅接合子は対象になります。家族の絵文字 👨‍👩‍👧 は人物の絵文字をゼロ幅接合子でつないだものなので、👨\u200d👩\u200d👧 になります。

エスケープの書き方

言語によって書き方が違うため、3つから選べます。あ(U+3042)と 😀(U+1F600)で比べます。

  • \uXXXX(JSON・Java・JavaScript): あ は \u3042、😀 は \ud83d\ude00。16進数4桁で書きます。U+FFFFより大きい文字は4桁に収まらないので、サロゲートペアと呼ばれる2つの番号に分けて書きます。JSON、Java、古いJavaScriptはこの書き方しか読めません
  • \u{X}(JavaScript・Rust・Swift): あ は \u{3042}、😀 は \u{1f600}。波かっこの中にコードポイントをそのまま書きます。桁数は文字によって変わり、先頭を0で埋めません。JavaScript(ES2015以降)、Rust、Swift、PHP(7以降)で使えます。JSONでは使えません
  • \uXXXX と \UXXXXXXXX(Python・C): あ は \u3042、😀 は \U0001f600。U+FFFFまでの文字は小文字の \u と4桁、それより大きい文字は大文字の \U と8桁で書きます。Python、C、C++、C#で使えます

最初の設定は \uXXXX です。どの言語で使うかわからないときは、この書き方がもっとも多くの環境で読めます。

かっこの中の言語名は、その書き方を読める主な言語です。このアプリが作るのはエスケープの並びで、どの言語でもそのまま貼り付けられる文字列リテラルではありません。言語ごとの決まりが別にあります(「エスケープする文字」と「注意すること」を参照)。

16進数の英字を大文字にする

最初の設定では、16進数の英字(aからf)を小文字で書きます。オンにすると \u30ab が \u30AB になります。先頭の \u と \U の大文字・小文字は変わりません。どちらで書いても、読む側の言語は同じ文字として扱います。

アンエスケープで戻せる書き方

アンエスケープは、次の3種類を文字に戻します。1つのテキストに混ざっていても構いません。

  • \u と16進数4桁: \u3042、\u00e9 など
  • \u{ と16進数と }: \u{3042}、\u{1F600} など。先頭に0がいくつ付いていても読みます
  • \U と16進数8桁: \U0001F600 など

16進数の英字は、大文字でも小文字でも構いません。

サロゲートペア(\ud83d\ude00)は、2つのエスケープを続けて戻すことで1文字の 😀 になります。このとき戻した数は2件と数えます。

次のものは変換せず、そのまま残します。

  • 形が足りないもの。\u12(4桁に足りない)、\u{3042(閉じかっこがない)、\U3042(8桁に足りない)など。Windowsのパス C:\users の \u も変換しません
  • U+10FFFFより大きい番号。Unicodeの番号はU+10FFFFまでなので、\u{110000} や \U00110000 は文字にできません。残した数は結果の下に表示されます
  • \n、\t、\"、\\、\x41 など、ほかのエスケープ

注意すること

\\ は特別に扱いません

このアプリが読むのはUnicodeエスケープだけです。プログラミング言語は \\ を「\ という1文字」として読みますが、このアプリはそう読みません。そのため \\u3042 は、手前の \ を残して \あ になります。

JSONを二重に文字列化したログなどで \\u3042 のような文字列を見かけたときは、アンエスケープで日本語を読める形にできます。ただし、言語が読んだ結果と同じにはなりません。文字列の値を正確に取り出したいときは、JSON整形ツールでJSONとして読むか、その言語で実行して確かめてください。

元のテキストに \u が含まれているとき

「ASCII以外の文字」と「見えない文字と紛らわしい空白だけ」では、\ をエスケープしません。そのため、元のテキストに \u3042 という6文字がそのまま含まれていると、エスケープした結果をアンエスケープしたときに あ に変わり、元に戻りません。「すべての文字」を選ぶと、\ も \u005c になるので、どんなテキストでも元に戻ります。

戻すのは1段だけです

1回の変換で戻すのは1段です。\u005cu3042 は \u3042 になり、あ にはなりません。もう1段戻したいときは、「結果を入力に移して逆変換」を押してから、変換の向きをアンエスケープに戻してください。

対になっていないサロゲート

\ud83d だけ、あるいは \ude00 だけのように、ペアの片方しかないエスケープも、そのままの番号の文字に戻します。この文字は単独では表示できず、コピーや保存をすると �(U+FFFD)に置き換わることがあります。結果にこのような文字があるときは、その数が結果の下に表示されます。長い文字列を途中で切ったときに、絵文字のペアが分かれて起こることが多いです。

入力したテキストはこのページを開いているブラウザの中だけで処理され、外部へ送信も保存もされません。ページを再読み込みすると入力は消えます。

FAQ

絵文字が \ud83d\ude00 のように2つになるのはなぜですか?

\uXXXX の書き方は16進数4桁までしか書けず、U+FFFFより大きい番号を1つで表せないためです。😀 はU+1F600なので、決まった計算で2つの番号(サロゲートペア)に分けて書きます。JSONやJavaはこの2つをまとめて1文字として読みます。番号を1つで書きたいときは、\u{X} か \UXXXXXXXX の書き方を選んでください。

肌の色を指定した絵文字や国旗が、たくさんのエスケープになるのはなぜですか?

その絵文字が、複数のコードポイントを組み合わせて作られているためです。たとえば 👍🏽 は 👍(U+1F44D)と肌の色(U+1F3FD)の2つでできていて、\u{X} の書き方では \u{1f44d}\u{1f3fd} になります。置き換えた数も2文字と数えます。

JSONの中の日本語がエスケープされているのは、壊れているのですか?

壊れていません。"\u65e5\u672c" と "日本" は、JSONとしてまったく同じ値です。JSONを読むプログラムはどちらも同じ文字列として受け取ります。出力する側のライブラリが、ASCIIだけで書く設定になっているだけです。PHPでは JSON_UNESCAPED_UNICODE、Pythonでは ensure_ascii=False を指定すると、日本語のまま出力されます。

テキストに見えない文字が混ざっていないか確かめられますか?

確かめられます。変換の向きを「エスケープ」にし、「エスケープする文字」で「見えない文字と紛らわしい空白だけ」を選んでから、テキストを貼り付けてください。結果の中で \u200b や \u3000 のような番号になっている場所に、その文字があります。見つかった数は結果の下に表示されます。

見つけた文字を取り除くときは、テキスト置換ツールで「正規表現を使う」をオンにし、検索する文字列に \u200b のような番号を入れて、置換後の文字列を空にします。

%E3%81%82 や あ は変換できますか?

できません。%E3%81%82 はURLエンコードで、URLエンコード・デコードツールで変換できます。あ や あ はHTMLの数値文字参照で、HTMLエスケープ・アンエスケープツールで変換できます。どれも「あ」を表していますが、書き方と使う場所が違います。

\xe3\x81\x82 は変換できますか?

できません。\x と2桁の書き方は、言語によって意味が違います。JavaScriptではU+00E3のような番号の文字を表し、Pythonのバイト列やCではUTF-8などの1バイトを表します。上の例はUTF-8の3バイトで「あ」を表していますが、どちらの意味かを文字列だけからは決められないため、このアプリは \x を変換しません。

Javaの .properties ファイルに使えますか?

使えます。\uXXXX の書き方を選んでください。古いJavaに付属していた native2ascii と同じ形になります。Java 9以降は、リソースバンドルとして読み込む .properties がUTF-8で読まれるため、日本語をそのまま書けることもあります。Properties.load にバイトのストリームを渡して読む場合は、今もエスケープが必要です。

大文字の \u30AB と小文字の \u30ab は違いますか?

同じ文字(カ)です。16進数の英字の大文字と小文字は区別されません。チームやツールの書き方に合わせて選んでください。なお、先頭の \u と \U は別のもので、\U の後ろには8桁が必要です。

種別
ユーティリティ
カテゴリ
開発者向け
タグ
unicode
escape
unescape
encode
decode
json
zero-width-space
invisible-characters
developer
  • Base64エンコード・デコードツール

    テキストやファイル(画像など)をBase64にエンコード、Base64をテキストやファイルにデコード。data URLとURLセーフ形式(Base64URL)にも対応。UTF-8対応でブラウザ内処理。

    ユーティリティ開発者向けbase64base64urldata-urlimagefileencodedecodedeveloperconverter
  • JSON⇔YAML変換ツール

    JSONとYAMLを相互に変換します。--- 区切りの複数ドキュメントのYAMLとJSON配列の相互変換にも対応し、設定ファイルの書式変換やデータ確認に使えます。

    ユーティリティ開発者向けjsonyamlconverterdeveloper
  • CSV⇔JSON変換ツール

    CSV(カンマ区切り)やTSV(タブ区切り)とJSONを相互に変換します。Excelやスプレッドシートの表をJSONにしたり、JSONの配列を表に戻したりできます。入れ子のJSONは address.city のような列に展開します。結果は、Excelで文字化けしないCSVファイルとしてダウンロードできます。

    ユーティリティ開発者向けcsvjsontsvconverterdeveloper