unicodeのエスケープ・アンエスケープ
かなり久しぶりの投稿。
最近仕事で、djangoを使っているが、pythonを今まで敬遠していたため、
いまいち慣れない。
自ずとテンプレートエンジンを使うのではなく、サーバーから持ってきた
JSONデータを使って、javascriptで画面を動的に変更するようにしている。
JSONデータは日本語データが\u3042のようにエスケープされた状態で
渡ってくるので、デバッグ時に何のデータが入っていたのか解かりにくい。
そこで、解析用のHTMLを作成した。変換ボタン押下で、通常の文字列が
入っていた場合はエスケープし、エスケープされた文が入っていた場合は
通常の文字列に変換する。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Unicode変換</title>
<script type="text/javascript">
function changeUnicode()
{
var str = document.getElementById("contents").value;
var len = str.length;
eval('var newStr="'+str +'"');
var escapeStr = "";
if(newStr.length == len)
{
var prefix = '\\u';
for(var i=0;i<str.length;i++)
{
var charCode = str.charCodeAt(i);
var hexStr = charCode.toString(16);
if(charCode < 127)
{
escapeStr += str[i];
continue;
}
switch(hexStr.length)
{
case 2:
escapeStr += prefix + '00' +hexStr;
break;
case 3:
escapeStr += prefix + '0' +hexStr;
break;
default:
escapeStr += prefix + hexStr;
}
}
document.getElementById("result").innerHTML=escapeStr;
}
else
{
document.getElementById("result").innerHTML=newStr;
}
}
</script>
</head>
<body>
<form>
<textarea id="contents" rows=10 cols=50"></textarea>
<input type=submit value="変換" onclick="changeUnicode();return false;"></input>
</form>
<div id="result"></div>
</body>
</html>
| 固定リンク


コメント