2

这是我一直在处理几个月的问题,我非常感谢任何帮助。Internet Explorer忽略JS文件中的所有“0”字符

我正在编码一个字符串,并使用下面的函数将输出写入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(见下文),我得根据浏览器不同的行为:

  • 铬/火狐: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的/阿贾克斯/ 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"); 
+0

BTW,设置显示的bug一个http://jsfiddle.net/是非常方便的这种问题 – 2012-08-13 00:22:58

+0

的完成!但不幸的是,我不能在那里硬编码一些字符(见注释) – Arturo 2012-08-13 00:35:20

+0

如何填写“这里有些字节是硬编码的”?我不希望在JavaScript字符串文字中嵌入空字符以很好地工作。 – Eric 2012-08-13 00:38:39

回答

1

我不知道你是什么目的,但里面的字符串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 

Test it here

相关问题