【问题标题】:Handling a windows-1250 URI in node.js/express在 node.js/express 中处理 windows-1250 URI
【发布时间】: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 服务。

我使用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 是一种不好的方法,但我希望有一些东西,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


【解决方案1】:

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

【讨论】:

  • 感谢您的建议,有时我们会忽略这样的事情。在这种情况下,尽管我单独使用decodeURIComponent 得到punk�d。我还缺少其他东西吗?
  • 您得到了问号字符,因为字符集中没有匹配的字符来显示它。但是,实际加载 URL 的数据仍然应该是正确的。 URL 不以 UTF-8 格式传输。
  • 如果使用decodeURIComponent将其转换为punk�d,那么在通过encodeURIComponent时会被编码回原来的值。
  • 是啊……不:D我已经试过了。首先,“解码”字符串punk�d 无法正确加载数据,目标Web 服务无法识别名称。然后,如果我将其编码回来,我会得到另一个乱码。我没有复制它,但它类似于punkfsd,而不是原始值。但我愿意尝试您提出的任何其他建议(:
  • 这是另一个奇怪的想法,但是您是否尝试过转义 URL?转义()
猜你喜欢
  • 1970-01-01
  • 2013-03-20
  • 2021-12-23
  • 1970-01-01
  • 2014-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多