旧式のエスケープ文字列を確認する

テキストを直接貼り付けて使います。処理はブラウザー内で行い、ファイルのアップロード、URLからの取得、一括処理には対応していません。新規コードでの採用は推奨されない関数です。

  1. 元のテキストを入れてエンコードするか、旧式のエスケープ文字列を入れてデコードします。
  2. 結果をプレーンテキストとして確認し、コピーします。入力を編集すると前の結果は消去されます。
  3. 別の変換を行う場合は、結果を自分で入力欄に貼り付けます。クリアすると入力と出力を消せます。

UTF-16コード単位を表す旧式のルール

2桁の%XXと4桁の%uXXXX

A-Z a-z 0-9と @ * _ + - . / はそのまま残します。それ以外のUTF-16コード単位は、値が256未満なら%XX、残りは%uXXXXで表します。16進数字は大文字を使い、必要なら先頭を0で埋めて2桁または4桁にします。uは小文字です。

é は %E9、你好 は %u4F60%u597D になります。😀 は2つのコード単位に分かれ、%uD83D%uDE00 と表されます。~、'、& もそれぞれ %7E、%27、%26 に変換されます。

無効な表記はエラーにせず残す

%u4f60 %GG %U0041 をデコードすると 你 %GG %U0041 になります。16進数字の大文字・小文字は問いませんが、接頭辞のuは小文字に限ります。%、%GG、%u123 は文字列のまま残り、URIErrorにはなりません。混在する有効な部分はデコードされるため、厳密な検証には使えません。

UTF-8やバックスラッシュ表記とは別物

%E4%BD%A0 は 你 にはならず、U+00E4、U+00BD、U+00A0 の各コード単位に変換されます。UTF-8のURL構成要素にはencodeURIComponent/decodeURIComponentを使います。

文字として入力した \n、\u4F60、& は、デコードしてもそのままです。JS/JSONの文字列リテラル解析、HTML実体参照のデコード、コードの実行は行いません。暗号化の機能でもありません。

旧式escape・unescapeについての質問

+や、すでにある%20はどうなりますか?

+は両方向ともそのままで、空白は%20にエンコードされます。%20をエンコードすると%2520になります。%2520をデコードすると、1回の処理では空白ではなく文字列%20が得られます。フォーム形式のデコードではありません。

空白や改行は変換前に削除されますか?

空白文字の削除やUnicode正規化は追加しません。ただし、textareaは実際の改行をLFにそろえ、エンコード結果は%0Aになります。元のCRLFやCRのバイト列は保持しません。空の入力は空の結果になります。

変換できれば正しいUnicodeと言えますか?

いいえ。escape/unescapeは%uD800のような孤立したUTF-16サロゲートも受け入れます。表示やクリップボードの処理で置換される場合があり、コピー後の復元は保証しません。ネイティブ関数を利用できない場合は通知し、別の方式で代用しません。

最近使ったツール: