Javascript 在node.js/express中处理windows-1250 URI

Javascript 在node.js/express中处理windows-1250 URI,javascript,node.js,express,encoding,iconv,Javascript,Node.js,Express,Encoding,Iconv,我的应用程序依赖于Web服务来形成其URI,因此有时它会产生(我认为是)一个windows-1250编码字符串(/punk%92d),express会失败,如下所示: 连接 400错误:无法解码参数“朋克%92d” 在Layer.match 因此,我考虑将每个指向该段的链接转换为utf-8(例如:/punk'd,这样就不会引用有问题的编码),然后再次返回windows-1250以使用外部Web服务 我使用iconv和iconv-lite尝试了这种方法,但结果总是有问题:/punk d,/punk

我的应用程序依赖于Web服务来形成其URI,因此有时它会产生(我认为是)一个windows-1250编码字符串(
/punk%92d
),express会失败,如下所示:

连接 400错误:无法解码参数“朋克%92d” 在Layer.match

因此,我考虑将每个指向该段的链接转换为utf-8(例如:
/punk'd
,这样就不会引用有问题的编码),然后再次返回windows-1250以使用外部Web服务

我使用
iconv
iconv-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
是一种不好的方法,但我希望任何东西都能起到作用。很明显,我尝试了此代码的多种变体,因为我对
缓冲区的了解有限,更简单的方法也行不通,例如:

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

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

如果这看起来太简单,那么很抱歉,但是由于node和express都是JavaScript,您是否尝试过简单地使用
解码组件('punk'd')
?在我看来,它只是一个标准的编码URI。我认为您从iconv获得了奇怪的输出,因为您使用了错误的编码进行转换。

谢谢您的建议,有时我们会忽略类似的事情。在这种情况下,虽然我得到了
朋克�d
单独使用
解码组件
。我是否遗漏了其他内容?您得到的是问号字符,因为字符集中没有匹配的字符来显示它。但是,数据应该仍然正确,才能实际加载URL。URL不会以UTF-8格式传输。如果使用decodeURIComponent将其转换为
punk�d
,然后当它通过encodeURIComponent时,它将被编码回其原始值。是的……否:我已经试过了。首先,“解码”字符串
朋克�d
无法正确加载数据,目标web服务无法识别该名称。然后,如果我把它重新编码,我会得到另一个乱码字符串。我没有复制它,但它有点像
punkfsd
,而不是原始值。但是我愿意尝试你得到的任何其他建议(:这里有另一个奇怪的想法,但是你尝试过转义URL吗?转义()那么,我是否正确理解您正在构建URI,通过该URI,有人将根据web服务返回的数据访问您的应用程序?是否有一些原因必须维护问题字符,因为您的用户发送这些字符可能与接收这些字符一样困难。如果如果是我,我会找到一种删除或替换它们的方法,只使用ASCII URI。