我正在使用
curl -Lk 'https://my-site.ru/?q=повар'
以及在nodejs服务器req.url
我看到了?q=водиÑелÑ
区域设置字符编码UTF-8
。正常解码字符需要什么?
答案 0 :(得分:0)
问题在于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,而是将每个字母都当作自己的字符:“拉丁文大写字母ETH”(U + 00D0)和“ INVERTED”问号'(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
。