Unicode エスケープ解除のガイド:\u4e2d を文字に戻す
認識するのはバックスラッシュと u、そして16進数4桁だけです。それ以外のエスケープは普通の文字として残ります。この点を押さえれば、結果が出ないときの理由も分かります。
どこで出会う文字列か
バックエンドが安全のため中国語をエスケープしてログに出す、Java プロジェクトが properties に文言を置く、ビルドツールが文字列リテラルを書き換える、API がエスケープ形式でエラーを返す。いずれも同じ作業です。
全角スペースやゼロ幅文字の確認にも使えます。先にエスケープし、少しずつ戻すと、見えない文字が符号位置として現れ、目視では分からない差異を特定できます。原因の説明にも便利です。
- ログや例外メッセージの中国語の読解
- Java の properties や古い設定の確認
- ソース中のエスケープされた文字列の復元
認識の規則:4桁、1層
バックスラッシュと u の直後に16進数4桁が続くものだけを、大文字小文字を問わず1層ずつ置換します。改行やタブ、16進数2桁のエスケープはこの形ではないため、そのまま残ります。
絵文字は UTF-16 ではサロゲートペアです。4桁のエスケープが2つ揃っていれば1文字に戻りますが、片方だけなら孤立したサロゲートになり、空白や疑問符として表示されます。コピー時の欠落を疑ってください。
- 4桁のエスケープのみ対象
- サロゲートペアは揃って初めて絵文字になる
- 16進数は大文字小文字どちらでも可
境界:復元以外はしない
ES6 の符号位置エスケープ、URL のパーセントエンコード、Base64 は対象外です。それぞれ専用のツールがあります。混ぜて処理すると半分だけ正しい結果になり、どこが違うのか分かりにくくなります。
鍵を使わないので誰でも実行できます。「エスケープされているから安全」と考えるのは危険です。また、壊れたバイトは戻せません。保存時に疑問符へ置き換わっていれば、復元しても疑問符のままです。
- 符号位置エスケープ、パーセント、Base64 は対象外
- 鍵がなく、開示への防御にはならない
- 疑問符に置き換わったバイトは戻せない
よくある質問
改行のエスケープが改行にならないのはなぜですか
このツールは4桁のユニコードエスケープだけを認識するからです。バックスラッシュ n は別のエスケープで、そのまま出力されます。改行が必要なら手動で置換するか、各言語の規則に任せてください。
サロゲートペアは絵文字に戻りますか
揃っていれば戻ります。4桁のエスケープ2つが1つの絵文字になります。片方だけの場合は復元できず、空白や疑問符になります。元の文字列が途中で切れた合図です。
Base64 や URL エンコードも解けますか
解けません。ここはユニコードエスケープ専用です。Base64、URL エンコード、HTML エンティティはそれぞれ専用のツールがあり、混在させると結果が不完全になります。
関連ツール:Unicodeエスケープデコーダー