首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在big5中获取node.js urlencode?

如何在big5中获取node.js urlencode?
EN

Stack Overflow用户
提问于 2014-12-23 13:45:56
回答 3查看 1.7K关注 0票数 1

我想使用nodejs将char‘十’(\u 5341)编码为十'%A4Q',但我不知道如何做到。我需要帮助。

更详细的是,下面是一个html文件名test.html:

代码语言:javascript
复制
<!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得到了不同的结果.守则是:

代码语言:javascript
复制
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)));

结果是:

代码语言:javascript
复制
%a2%cc
%a4%51

即使我使用Java:System.out.println(URLEncoder.encode("十", "Big5"));,我也得到'%A4%51‘。

下面是一个相关的问题:URL Decode Difference between C# and Java

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-12-23 15:16:07

因为%51是big5中的char 'Q‘,所以'%A4Q’等于'%A4%51',所以urlencode解析它。

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

票数 0
EN

Stack Overflow用户

发布于 2014-12-24 11:00:07

基于@user1783292上面的答案,我编写了下面的代码。

代码语言:javascript
复制
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也可能忽略这些规则(所以这是不正确的)。

票数 1
EN

Stack Overflow用户

发布于 2017-06-15 08:23:28

我相信有人可能需要解码function.lol

代码语言:javascript
复制
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;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27621643

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档