在Javascript中将字符转换为正确的ASCII扩展整数值

时间:2012-02-17 08:23:03

标签: javascript utf-8 character-encoding iso-8859-1

下面的代码包含一个JS函数,它接收参数String“€€”(欧元符号)。 我需要将这些字符中的每一个转换为ASCII扩展的等效整数(使用ISO-8859-1时为128)。

然而,t [0]和t [1]取值“8364”而不是“128”。我究竟做错了什么?请注意,如果我使用UTF-8而不是ISO-8859-1,它们取值65533,在JS调试器(Chrome和IE开发人员工具)中显示一个问号而不是€符号。

非常感谢你

<html>
<head>
<meta http-equiv="Content-Type" content="text/javascript; charset=ISO-8859-1">
<title>JavaScript Scripting</title>
</head>
<body>
<script type="text/javascript" charset="ISO-8859-1">
function d(s) 
{
    var data = (s + "").split("");
    var dataLength = data.length;
    var t = [dataLength],n;

    for(n=0;n<dataLength;n++)
    t[n]=data[n].charCodeAt(0);
}
d("€€");
</script>
</body>
</html>

全文是我从文件“output.js”粘贴了这个“€€”,其中这两个字节是由下面的Java代码编写的,代表整数[128,128]。这就是为什么我需要t [0]和t [1]得到值128。

res.setContentType("application/octet-stream"); 
res.setHeader("Content-Disposition","attachment;filename=output.js;charset=ISO-8859-1");
ServletOutputStream os = res.getOutputStream();
char result[]=encode(req.getParameter("originalScript"));
// result[0] and result[1] have here integer value 128
String result2=new String(result);
// result2 is displayed here as non printable characters (blank)
os.print(result2);
// On output.js "€€" is displayed

1 个答案:

答案 0 :(得分:1)

你必须确保文件实际上保存为ISO-8859-1,但实际上这是不可能的,因为该字符集中没有€字符。

  

“ISO / IEC 8859-1缺少欧元符号。”

http://en.wikipedia.org/wiki/ISO/IEC_8859-1

当您获得字符代码8364时,该文件很可能保存为UTF-8,因为该字符代码与unicode character €对应。