escape() 関数と unescape() 関数
escape() 関数は (livedocs@lab) は文字列を URL エンコードのフォーマットに変換するグローバル関数です。基本的に、英数字以外の文字であれば % 付の16進数に変換されます。+ などいくつか変換されない文字もあります。
trace(escape("1+3%2=0")); // 1+3%252%3D0 が出力される trace(escape("h:m@u/a?b&c")); // h%3Am@u/a%3Fb%26c が出力される trace(escape("ハロー")); // %u30CF%u30ED%u30FC が出力される
escape() で変換された文字を戻すには unescape() 関数 (livedocs@lab) を使います。
var str:String = escape("1+3%2=0"); trace(str); // 1+3%252%3D0 が出力される trace(unescape(str)); // 1+3%2=0 が出力される
escapeMultiByte() 関数と unescapeMultiByte() 関数
escapeMultiByte() 関数 (livedocs@lab) と unescapeMultiByte() 関数 (livedocs@lab) は flash.utils パッケージに含まれる関数です。
escapeMultiByte() は文字列を UTF-8 もしくはシステムのコードページ (Shift-JIS 等) に変換した文字列を返します。
どちらのエンコーディングになるかは System.useCodePage の値で決まります。true の場合は OS のコードページ、false の場合は UTF-8 です。
var str:String = "もなか"; // 比較のために URL エンコーディングの結果を確認 trace(escape(str)); // %u3082%u306A%u304B が出力される // OS のコードページ(SJIS)にエンコード System.useCodePage = true; trace(escapeMultiByte(str)); // %82%E0%82%C8%82%A9 が出力される // UTF-8 にエンコード System.useCodePage = false; trace(escapeMultiByte(str)); // %E3%82%82%E3%81%AA%E3%81%8B が出力される
変換した文字列を戻すには unescapeMultiByte() 関数を使用します。
var str:String = escapeMultiByte("もなか"); trace(str); // %82%E0%82%C8%82%A9 が出力される trace(unescapeMultiByte(str)); // もなか が出力される
unescapeMultiByte() も escapeMultiByte() と同様に System.useCodePage の値により結果が変わります。unescapeMultiByte() で元の文字列に戻す際は escapeMultiByte() で変換した際と System.useCodePage の値が同じである必要があります。自動的に UTF-8 かどうかを判定してくれたりはしません。
また、 System.useCodePage=true で変換した場合の結果はシステムのコードページに依存します。そのため、エンコードとデコードが同じコードページのシステム上で行われないと元の文字列に戻せません。例えば Shift-JIS で変換した文字列はShift-JIS の環境でしか戻せなくなります。
コメントする