テキストと%u Unicodeエスケープ変換

%u4F60のような旧形式のエスケープを文字に戻したり、テキストから生成したりできます。エンコードではU+00FFまでの文字を残し、それより大きいUTF-16コード単位を%uXXXXで表します。UTF-8のバイト列をGBKに変換する機能ではありません。

ブラウザ内でローカルに実行

文字列を変換する手順

中国語の文字などを古い形式で表した文字列の確認に使えます。%u形式に加え、%XXと末尾にセミコロンがある16進文字参照もデコードします。処理はブラウザー内で行い、変換用のリクエストで入力を送信しません。

  1. Aé你😀をエンコードするとAé%u4F60%uD83D%uDE00になります。éは変化せず、絵文字は2つのUTF-16コード単位で表されます。
  2. %u4F60または你をデコードすると你になります。left; Aの結果はleft; Aとなり、通常の文章のセミコロンと空白も残ります。
  3. 結果を通常のテキストとしてコピーします。入力の編集で古い結果が消え、クリアで入出力を空にできます。デコードに失敗した場合も以前の出力は残しません。

対応形式と変換の境界

%XXをUTF-8のバイト列として扱わない

%E4%F6%FCはäöüになります。各%XXを個別にU+00XXへ変換するため、URLで使われるUTF-8表記の%E4%BD%A0は、このページでは你に戻りません。その形式にはURLデコードツールを使います。

エンコードでは空白、記号、%を含むU+00FFまでの文字を変更しません。escape()全体の動作とは異なり、JavaScriptのバックスラッシュ付きエスケープも生成しません。

16進文字参照は終端付きで、置換は1回だけ

AはA、😀は😀に変わります。末尾にセミコロンがあるこれらの参照は、値をUnicodeスカラー値に直接変換します。サロゲート値とU+10FFFFを超える値はエラーになります。HTML文書全体の構文解析は行いません。

互換性のため、セミコロンのない旧表記&#x4F60も1つのUTF-16コード単位として你に戻します。小文字のxに続く16進数字がちょうど4桁で、その直後に別の16進数字がない場合に限ります。それ以外の終端がない参照は文字列のまま残します。

%25u0041の結果は文字列としての%u0041です。10進文字参照、名前付き文字参照、\u0041、%U0041、未完成のパーセントエスケープはそのまま残します。%u形式と旧表記の4桁参照は孤立サロゲートも含めUTF-16コード単位を保持するため、文字列全体のUnicode妥当性を検査する機能ではありません。

%u形式についての質問

エンコード後にデコードすれば必ず元に戻りますか?

必ずしも戻りません。入力に文字列として%41があれば、エンコード時はそのままですが、デコード時にAになります。また、入力欄は実際のCR・CRLF改行をLFに統一します。Unicode正規化は行いません。

旧名称のUTF-8 to GBKは何を意味していましたか?

旧ラベルは実装と一致していませんでした。引き継いだ機能は文字列のエスケープ変換で、ファイルのバイト列や文字エンコーディングを変換するものではありません。結果にHTMLタグが含まれても、テキストとして表示し実行しません。

最近使ったツール: