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 12价值观97,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 相同的问题。

我的文件.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>

我的文件.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 回答