【问题标题】:Encoding info_hash for request torrent tracker为请求种子跟踪器编码 info_hash
【发布时间】:2014-08-07 21:45:14
【问题描述】:

我想与 Node.js 中的 torrent 跟踪器进行交互。 所以我计算了 info_hash 并得到了好的结果: 7cd350e5a70f0a61593e636543f9fc670ffa8a4d

但是要发送到跟踪器,它必须是 urlencoded。问题是我不知道如何获得正确的编码值 %7c%d3P%e5%a7%0f%0aaY%3eceC%f9%fcg%0f%fa%8aM

我不知道如何获取这个值,因为它不遵循%nnformat

我尝试使用 encodeURIComponent 和 querystring,但没有得到正确的字符串。

【问题讨论】:

    标签: node.js get urlencode bittorrent


    【解决方案1】:

    这是与预期输出(包括大小写)相匹配的一种解决方案:

    var h = '7cd350e5a70f0a61593e636543f9fc670ffa8a4d';
    h = h.replace(/.{2}/g, function(m) {
      var v = parseInt(m, 16);
      if (v <= 127) {
        m = encodeURIComponent(String.fromCharCode(v));
        if (m[0] === '%')
          m = m.toLowerCase();
      } else
        m = '%' + m;
      return m;
    });
    console.log(h);
    
    // outputs: %7c%d3P%e5%a7%0f%0aaY%3eceC%f9%fcg%0f%fa%8aM
    

    【讨论】:

    • 好的,谢谢。你能解释一下为什么你必须做所有这些事情,对这个进行 url 编码吗?
    • 嗯,你必须以某种方式将每两个字符转换为它们各自的字节,而正则表达式和String.fromCharCode() 会做到这一点。但是,由于该函数返回 utf16 字符串,因此您不能将大于最大 ASCII 值的值传递给它,因为它可能返回一个最终被编码为多个字节的字符(例如 encodeURIComponent(String.fromCharCode(0xd3)))。这就是 if-else 块的原因。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-19
    • 1970-01-01
    相关资源
    最近更新 更多