Node.js, русские символы в запросе плохо декодируются - PullRequest
0 голосов
/ 27 декабря 2018

Я использую

curl -Lk 'https://my-site.ru/?q=повар'

и на сервере nodejs req.url

Я вижу ?q=водиÑелÑ

Кодировка символов локали UTF-8.Что нужно для нормально декодируемого символа?

1 Ответ

0 голосов
/ 27 декабря 2018

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...