Node.js,查询中的俄语字符解码效果不佳

Node.js,查询中的俄语字符解码效果不佳,node.js,utf-8,decode,utf-16,Node.js,Utf 8,Decode,Utf 16,我很忙 curl-Lk'https://my-site.ru/?q=Паа′ 在nodejs服务器中req.url 我明白了 区域设置字符编码UTF-8。正常解码字符需要什么?问题在于curl没有正确发送URL。URL应采用URL编码(其中ПБааа应为%D0%BF%D0%be%D0%B2%D0%B0%D1%80)以符合标准。要使curl以这种格式发送,您可以这样做(注意,我必须使用-G强制获取协议,否则--data encode将使其发送): 然后,req.query.q将是“Паааа” 您

我很忙

curl-Lk'https://my-site.ru/?q=Паа′

在nodejs服务器中
req.url

我明白了


区域设置字符编码
UTF-8
。正常解码字符需要什么?

问题在于
curl
没有正确发送URL。URL应采用URL编码(其中
ПБааа
应为
%D0%BF%D0%be%D0%B2%D0%B0%D1%80
)以符合标准。要使
curl
以这种格式发送,您可以这样做(注意,我必须使用
-G
强制获取协议,否则
--data encode
将使其发送):

然后,
req.query.q
将是
“Паааа”

您的
curl
直接将其作为UTF-8发送,这在URL中是非标准的。我得到的不是你说的。第一个字母
П
,变成
D0 BF
,Express不解码为UTF-8,而是将每个字母作为自己的字符:“拉丁文大写字母ETH”(U+00D0)和“倒问号”(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
取而代之。

您的操作系统和shell是什么,您正在从中执行
curl
?您看到的代码是什么?@Amadan i'm use OS macOS Mojave版本10.14.2,shell Zsh版本5.5.1。代码服务器:快速版本“^4.16.2”router.get(“/”,(req)=>{console.log(req.originalUrl);})
您还可以报告
locale
命令提供的内容吗?@Amadan
LANG=en_US.UTF-8 LC_-CTYPE=en_US.UTF-8 LC_-NUMERIC=en_US.UTF-8 LC_-TIME=en_-US.UTF-8 LC_-COLLATE=en_-US.UTF-8 LC_-MONETARY=en_.UTF-8 LC_-MESSAGES=en_-US.UTF-8 LC-8 LC_-PAPER=en_-US.UTF-8 LC-u-u-LC-u-u-u-u-NAME=en_LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=en_US.UTF-8 LC_ALL=
@Amadan对不起,我躺在容器里,不小心看了一下。下面是这样的答案:LANG=LC\u COLLATE=“C”LC\u CTYPE=“UTF-8”LC\u MESSAGES=“C”LC\u MONETARY=“C”LC\u NUMERIC=“C”LC\u TIME=“C”LC\u ALL=
Thx。我知道decodeURI/encodeURI的标准。但是如果我在php中使用它,它就可以正常工作,并且没有encodeURI。我想知道为什么它在nodejs中不起作用
curl -GLk 'https://my-site.ru/' --data-encode 'q=повар'