Node.js,查询中的俄语字符解码不佳
Node.js, russian characters in the query are poorly decoded
我在用
curl -Lk 'https://my-site.ru/?q=повар'
在 nodejs 服务器中 req.url
我明白了?q=водиÑелÑ
区域字符编码UTF-8
。正常解码字符需要什么?
问题在于 curl
没有正确发送 URL。 URL 应该采用 URL 编码(其中 повар
应该是 %D0%BF%D0%BE%D0%B2%D0%B0%D1%80
)以符合标准。要使 curl
以这种格式发送,您可以这样做(注意我必须使用 -G
强制 GET 协议,否则 --data-encode
将使其成为 POST):
curl -GLk 'https://my-site.ru/' --data-encode 'q=повар'
那么 req.query.q
将是 "повар"
。
您的 curl
以 UTF-8 格式直接发送,这在 URL 中是非标准的。我得到 поваÑ
(不是你所说的)。第一个字母 п
变为 D0 BF
,Express 不会将其解码为 UTF-8,而是将每个字母作为自己的字符:'LATIN CAPITAL LETTER ETH' (U+00D0) 和 'INVERTED QUESTION MARK' (U+00BF) - 即 п
。可以对此进行解码;在 Node 中,最简单的方法是使用 utf8
包 (utf8.decode(req.query.q)
);但是我强烈建议您只遵循标准。
请注意,当您在浏览器中键入 https://my-site.ru/?q=повар
(而不是 curl
)时,您的浏览器实际上会正确发送 https://my-site.ru/?q=%D0%BF%D0%BE%D0%B2%D0%B0%D1%80
。
我在用
curl -Lk 'https://my-site.ru/?q=повар'
在 nodejs 服务器中 req.url
我明白了?q=водиÑелÑ
区域字符编码UTF-8
。正常解码字符需要什么?
问题在于 curl
没有正确发送 URL。 URL 应该采用 URL 编码(其中 повар
应该是 %D0%BF%D0%BE%D0%B2%D0%B0%D1%80
)以符合标准。要使 curl
以这种格式发送,您可以这样做(注意我必须使用 -G
强制 GET 协议,否则 --data-encode
将使其成为 POST):
curl -GLk 'https://my-site.ru/' --data-encode 'q=повар'
那么 req.query.q
将是 "повар"
。
您的 curl
以 UTF-8 格式直接发送,这在 URL 中是非标准的。我得到 поваÑ
(不是你所说的)。第一个字母 п
变为 D0 BF
,Express 不会将其解码为 UTF-8,而是将每个字母作为自己的字符:'LATIN CAPITAL LETTER ETH' (U+00D0) 和 'INVERTED QUESTION MARK' (U+00BF) - 即 п
。可以对此进行解码;在 Node 中,最简单的方法是使用 utf8
包 (utf8.decode(req.query.q)
);但是我强烈建议您只遵循标准。
请注意,当您在浏览器中键入 https://my-site.ru/?q=повар
(而不是 curl
)时,您的浏览器实际上会正确发送 https://my-site.ru/?q=%D0%BF%D0%BE%D0%B2%D0%B0%D1%80
。