我的应用程序依赖于Web服务来构成其URI,因此有时会附带(我相信是)Windows-1250编码的字符串(/punk%92d),并且Express失败如下:


  连接
  400错误:无法解码参数'punk%92d'
  在Layer.match


因此,我考虑过将到该段的每个链接转换为utf-8(例如:/punk’d,因此不会引用有问题的编码),然后再次回到Windows-1250以与外部Web服务一起使用。

我尝试同时使用iconviconv-lite的这种方法,但是结果总是有问题:/punk d/punk�d等。

这是使用iconv的示例:

var str = 'punk’d';
var buf = new Buffer(str.toString('binary'), 'binary');
console.log(new Iconv('UTF-8', 'Windows-1250').convert(buf).toString('binary'));


…和iconv-lite:

console.log(iconv.decode(new Buffer(str), 'win1250'));


我知道使用binary是一种不好的方法,但是我希望有什么可以做的。显然,由于对Buffers的了解有限,我尝试了此代码的多种变体,即使是更简单的事情也无法正常工作,例如:

console.log(new Buffer('punk’d').toString('utf-8'));


因此,我对在express中处理URI中的这些编码字符串的方法或者在node.js中转换它们的有效方法感兴趣。

最佳答案

抱歉,如果尝试做起来似乎太简单了,但是由于Node和Express都是JavaScript,因此您是否只是尝试使用decodeURIComponent('punk’d')?在我看来,它只是一个标准的编码URI。我认为您从iconv获得了奇怪的输出,因为您是从错误的编码转换而来的。

09-16 09:55