TwitterAPIなどを使い、JSON形式でデータを取得した場合、文字列が次のようになっている場合があります。
\u4eca\u671d\u306f
初めて見ると「文字化けか」と思ってしまうかもしれませんが、これはJSONのルール通りなんだそうです。
この「\uXXXX」形式は「Unicode文字エスケープシーケンス」、「unicode escape sequence」などと呼ぶそうです。
2.4.1 Unicode 文字エスケープ シーケンス (C#)
Unicodeにおける文字番号を4桁の16進数に置き換えて、頭に「\u」を付けます。
これをJavaScriptを使って人間が読める形にする方法(デコード)を調べました。
単純な方法
簡単なのは次のようにJavaScriptでページに書く方法です。
document.write("\u4eca\u671d\u306f");
これで次のように表示されます。
今朝は
関数を使う方法
「json_str_decode」という関数を作ってみました。
このケースでは「\」が(JavaScriptの)エスケープシーケンスに該当してしまうので「\\」のようにしないと正しく認識しません。
document.write(json_str_decode("\\u4eca\\u671d\\u306f"));
function json_str_decode(str){
arrs=str.match(/\\u.{4}/g);
var t="";
for(i=0;i<arrs.length;i++){
t+=String.fromCharCode(arrs[i].replace("\\u","0x"));
}
return(t);
}
function json_str_decode(str){
arrs=str.match(/\\u.{4}/g);
var t="";
for(i=0;i<arrs.length;i++){
t+=String.fromCharCode(arrs[i].replace("\\u","0x"));
}
return(t);
}
次のようにテキストエリアなどに貼り付けて使う場合には「\\」とする必要がありません。
<textarea id="ta">\u4eca\u671d\u306f</textarea>
<div id="mydiv"></div>
<div id="mydiv"></div>
var a=document.getElementById("ta").value;
document.write(json_str_decode(a));
document.write(json_str_decode(a));

コメント