Проблема в 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
вместо этого.