我想使用nodejs将char‘十’(\u 5341)编码为十'%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中打开这个文件,输入'十‘并单击'Submit',您可以看到地址栏中的url是’十‘。
我只想使用nodejs来转换与Chrome(和其他浏览器)相同的url。我试过使用iconv lite或node-iconv,但无法将“十”转换为“%a4q”。
使用I和node得到了不同的结果.守则是:
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
发布于 2014-12-23 15:16:07
因为%51是big5中的char 'Q‘,所以'%A4Q’等于'%A4%51',所以urlencode解析它。
此外,'%A4Q‘中的'A’是不区分大小写的,而'Q‘则不是,因为'Q’和'q‘是不同的(%51和%71)。
发布于 2014-12-24 11:00:07
基于@user1783292上面的答案,我编写了下面的代码。
var Iconv = require('iconv').Iconv;
var iconv = new Iconv('utf8', 'BIG5');
function big5_encode(chr) {
var rtn = "";
var buf = iconv.convert(chr);
for(var i=0;i<buf.length;i+=2) {
rtn += '%' + buf[i].toString(16).toUpperCase();
rtn += ((buf[i+1] >= 65 && buf[i+1] <= 90)
||(buf[i+1]>=97 && buf[i+1]<=122))
? String.fromCharCode(buf[i+1])
: '%' + buf[i+1].toString(16).toUpperCase();
}
return rtn;
}
var chr = '十尢我';
console.log(big5_encode(chr));输出是%A4Q%A4q%A7%DA,和Chrome一样。
也许有一些关于big5 url编码的标准规则,但我没有找到它。而且Java的URLDecoder也可能忽略这些规则(所以这是不正确的)。
发布于 2017-06-15 08:23:28
我相信有人可能需要解码function.lol
function big5_urldecode(str){
var tokens = str.split("%").slice(1);
var chars = [];
tokens.forEach((token)=>{
chars.push(parseInt(token.substring(0,2),16));
if(token.length > 2){
chars.push(token.charCodeAt(2));
}
});
return chars;
}https://stackoverflow.com/questions/27621643
复制相似问题