Yueseryueser.com

← ガイド一覧

Unicode エスケープのガイド:ASCII しか通らない経路を越える

エスケープの目的は、UTF-8 を保証しない経路を通すことです。経路が信頼できるなら、変換は読みにくくするだけです。

ツールを開く:Unicodeエスケープエンコーダー

\uXXXX が必要になる場面

古い Java の properties は ISO-8859-1 として読まれるため、中国語は \u4e2d と書く必要があります。ビルドスクリプト、テンプレートエンジン、ログ経路が ASCII しか保証しないこともあります。

文字コードの切り分けにも役立ちます。同じ文が2つの環境で違って見えるとき、両方をエスケープすれば、文字自体が違うのか描画だけが違うのかを確認できます。ASCII が読めるままなので比較しやすいです。

規則と2つの落とし穴

変換されるのは非 ASCII だけで、ASCII はそのままなのでコードの構造は読めます。各文字はバックスラッシュと u、16進数4桁で表します。文字単位の変換であり、バイト単位の16進数エンコードとは別物です。

落とし穴の1つ目は、U+FFFF を超える文字です。多くの絵文字が該当し、サロゲートペアが必要ですが、このツールは5桁の形式を出力します。復号側は4桁しか読まないため、往復で別の文字と余分な0が残ります。

境界:解決するのは転送であって機密ではない

鍵はありません。エスケープを見た人は誰でも戻せるので、暗号ではなく、機密情報を隠す用途にも使えません。サイズも増えます。中国語1文字が6文字になるため、長い文書では差が目立ちます。

現代のシステムはほとんどが端末まで UTF-8 です。データベース、HTTP ヘッダ、ページが文字コードを宣言していれば、手作業のエスケープは通常不要です。UTF-8 を扱えない箇所を確認できたときだけ、この層を足してください。

よくある質問

絵文字が壊れるのはなぜですか

符号位置をそのまま出力し、4桁に制限していないため、絵文字は5桁の形式になります。復号側は4桁しか読まないので別の文字になります。絵文字には Base64 か URL エンコードを使ってください。

URL エンコードとの違いは何ですか

URL エンコードはバイト単位でパーセント表記にし、主に URL 用です。Unicode エスケープは文字単位で書き、主にソースや設定ファイル用です。同じ漢字でも結果は全く異なります。

エスケープした文字列はプログラムで読めますか

対応した処理系なら読めます。Java、JavaScript、JSON は解釈します。ただしテキストエディタは自動で戻さないため、人間にはバックスラッシュと英数字に見えます。

関連ツール:Unicodeエスケープエンコーダー