我想使用nodejs将char'十'(\ u5341)编码为big5'%A4Q',但是我不知道该怎么做。我需要帮助。

更详细的说,下面是一个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中打开该文件,输入“十”并单击“提交”,您会看到地址栏中的网址是“ http://localhost/test.html?a=%A4Q”。

我只想使用nodejs转换与Chrome(和其他浏览器)相同的网址。我尝试使用iconv-lite或node-iconv,但无法将“十”转换为“%A4Q”



使用iconv-lite和node-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

最佳答案

因为%51在big5中是char'Q',所以'%A4Q'等于'%A4%51',urlencode对其进行解析。

此外,'%A4Q'中的'A'不区分大小写,而'Q'则不区分大小写,因为'Q'和'q'是不同的(%51和%71)

08-17 12:50