昔PHPで書いたUnicode Escapeツールを載せてましたが、今度はJavaScriptで書いたので載せます。
日本語などのマルチバイト文字を\uXXXX形式にUnicodeエスケープします。
こういう風にエスケープ出来ます。
ほげ → \u307b\u3052
ASCIIコード127番以上の文字だけエスケープするので、空白や改行、半角記号などはエスケープしません。
Unicodeエスケープした文字列をアンエスケープして戻す事も出来ます。
ソースですが、Escapeを行う部分はこうなってます。
var escapeUnicode = function(str) { return str.replace(/[^\x00-\x7F]/g, function(c) { return '\\u' + ('000' + c.charCodeAt(0).toString(16)).slice(-4); }); };
エスケープした時に、\uXXXXの4ケタになるように、頭に0を付けて詰めてます。
また、マルチバイト文字だけエスケープして、シングルバイトの記号はエスケープしないように、ASCIIコード127以下の文字は置き替えません。正規表現[^\x00-\x7F] の部分です。
16進数の7Fは、10進数の127なので、つまり0から127に該当しない場合だけ変換します。
つづいてUnesacpeを行う部分はこうです。
var unescapeUnicode = function(str) { return str.replace(/\\u([a-fA-F0-9]{4})/g, function(x, y) { return String.fromCharCode(parseInt(y, 16)); }); };
正規表現で\uXXXXを表すと\\u([a-fA-F0-9]{4})なので、このパターンに一致する部分を変換する、という仕組みです。