【发布时间】:2014-10-06 22:26:01
【问题描述】:
我的应用程序依赖于 web 服务来形成它的 URI,所以有时它会出现(我相信是)一个 windows-1250 编码字符串 (/punk%92d) 并且 express 失败如下:
连接 400 错误:无法解码参数 'punk%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 是一种不好的方法,但我希望有一些东西,anything 可以完成这项工作。我显然尝试了此代码的多种变体,因为我对Buffers 的了解有限,甚至更简单的事情都行不通,例如:
console.log(new Buffer('punk’d').toString('utf-8'));
所以我对在 express 中处理 URI 中那些编码字符串的方法或在 node.js 中转换它们的有效方法感兴趣。
【问题讨论】:
-
那么,我是否正确理解这一点,您正在构建 URI,人们将通过这些 URI 根据从 Web 服务返回的数据访问您的应用程序?是否有某些原因需要维护问题字符必须,因为您的用户似乎在向您发送这些字符时与您在接收时遇到的麻烦一样多 他们。如果是我,我会想办法删除或替换它们,只使用 ASCII URI。
标签: javascript node.js express encoding iconv