2

これは私が何ヶ月も取り組んできた問題であり、何か助けていただければ幸いです。

以下の関数を使用して、文字列をエンコードし、出力を 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 1297,0,108,101,114,116,40,34,80,114,0,105
  • Internet Explorer 9: length 1097,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");
4

1 に答える 1

0

あなたの目的はわかりませんが、文字列内の NULL バイトは正当ではありません。

一方、カンマ区切りの整数のリストとしてバイトを送信することで、バイト (整数) の配列を簡単に再構築できます。または、別のアプローチはjsonファイルです。コード例:

function d(a)
{
  a=(a+"").split(",");
  var l=a.length,x=[l];
  alert(l);
  for(i=0;i<l;i++){
    x[i]=Number(a[i]);
    document.write(x[i]);
    document.write("<br>");
  }
  return x;
};
var ar = d("97,0,108,101,114,116,40,34,80,114,0,105"); // returns the byte array, length=12

ここでテストしてください

于 2012-09-09T17:15:48.603 に答える