我想使用nodejs将char'十'(\ u5341)编码为big5'%A4Q',但我不知道该怎么做。我需要帮助。如何在node.js中获取big5 urlencode?
更多细节,波纹管是一个html文件名的test.html:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=big5">
<title>test</title>
</head>
<body>
<form>
<input name="a"/>
<input type="submit">
</form>
</body>
</html>
而在Chrome中打开此文件,键入“十”,然后点击“提交”,就可以看到URL地址栏是'http://localhost/test.html?a=%A4Q
'。
我只想使用nodejs来转换与Chrome(和其他浏览器)相同的url。我试图用的iconv - 精简版或节点的iconv,但不能将“十”到“%A4Q”
使用的iconv - 精简版和节点的iconv我得到不同的结果。代码是:
var iconv = require('iconv-lite');
var Iconv = require('iconv').Iconv;
var iconv2 = new Iconv('utf8', 'BIG5');
function format(buf) {
var rtn = "";
for(var i=0;i<buf.length;i++) {
rtn += "%" + buf[i].toString(16);
}
return rtn;
}
var chr = '十';
console.log(format(iconv.encode(chr, 'big5')));
console.log(format(iconv2.convert(chr)));
结果是:
%a2%cc
%a4%51
即使我用Java:System.out.println(URLEncoder.encode("十", "Big5"));
我还得到 '%A4%51'。
这里有一个相关的问题:URL Decode Difference between C# and Java
更重要的是,节点的iconv比的iconv-精简版更精确。我不知道iconv-lite是否存在bug,它在对诸如“十”之类的字符进行编码时,与node-iconv和Chrome等浏览器不同。 – abeyuhang
ehhh,char'里',node-iconv不能转换它(会抛出异常)。但iconv-lite可以正确编码它。 – abeyuhang