これは私が何ヶ月も取り組んできた問題であり、何か助けていただければ幸いです。
以下の関数を使用して、文字列をエンコードし、出力を MyFile.js に書き込みます。私の例をデバッグしている間char encodedCode[]
、整数として表示されlength 12
、これらの値は次のとおり97,0,108,101,114,116,40,34,80,114,0,105
です。
Notepad++ からわかるように、MyFile.js は予想されるサイズと文字で正しく生成されます。
MyFileServlet.java
public void doPost(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException
{
res.setCharacterEncoding("iso-8859-1");
res.setHeader("Content-Type", "text/javascript;charset=iso-8859-1");
res.setHeader("Content-Disposition","attachment;filename=MyFile.js");
PrintWriter printer=res.getWriter();
char encodedCode[]=encode(req.getParameter("originalScript"));
printer.write(encodedCode);
printer.close();
}
ただし、MyFile.html のデバッグ コード (以下を参照) を使用してその MyFile.js を実行しようとすると、ブラウザーによって異なる動作が発生します。
- Chrome/Firefox:
length 12
値97,0,108,101,114,116,40,34,80,114,0,105
- Internet Explorer 9:
length 10
値97,108,101,114,116,40,34,80,114,105
したがって、IE はすべての「0」文字を無視しています。なんで?どうもありがとうございました
JSFIDDLE: http://jsfiddle.net/vnqL2/
編集:これらのバイトを外部バイナリ ファイル MyFile.xxx に書き込んで、Javascript/JQuery/Ajax/XMLHttpRequest から読み取ろうとしましたが、IE でも同じ問題が発生します。
MyFile.html
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>My Page</title>
</head>
<body>
<script type="text/javascript" charset="iso-8859-1" src="MyFile.js">
</script>
</body>
</html>
MyFile.js
function d(a)
{
a=(a+"").split("");
var l=a.length,x=[l];
alert(l);
for(i=0;i<l;i++){
x[i]=a[i].charCodeAt(0);
document.write(x[i]);
}
};
d("HERE GO THOSE BYTES HARDCODED");