2015-03-12 2 views
4

У меня есть простое приложение, которое использует запрос jjery ajax для отправки данных формы на сервер узлов, который, в свою очередь, отправляет стороннему api, используя модуль Request для узла js.Кодирование символов UTF8 с использованием узла Модуль запроса

Проблема, с которой я сталкиваюсь, заключается в том, что акцентированные (и другие подобные) символы не кодируются правильно, когда они достигают стороннего сервера. Например é записывается как Ã ©

Я довольно уверен, что это связано с настройками для запроса, как я получить те же результаты, когда я обхожу вызов AJAX.

Вот настройки, которые я использую:

HTML: настройки Ajax

<meta http-equiv="Content-type" content="text/html; charset=utf-8" /> 

JQuery:

type  : 'POST', 
url   : '/api', 
data  : formData, // A json object 
dataType : 'json', 
ContentType : 'text/html; charset=utf-8' 

настройки запроса модуля в узле (там ничего не происходит в виде данных между сообщением ajax и отправкой по запросу):

request.post({ 
    url: "https://testurl.com/api/", 
    form: formData, 
    headers: {'Content-Type': 'application/json; charset=utf-8'} 
} ... 

Я прочитал различные решения SO, но не имел успеха, поэтому любые предложения были высоко оценены.

+0

Вы пробовали установить «кодировку» - вариант запроса специально для «utf-8»? У вас есть тело-парсер в стеке приложений? (так ли formData фактически анализируется как JSON, прежде чем назначать его «запросу» или это еще строка?). Что происходит, когда вы 'console.log (formData)' на вашем Node-сервере? – Charminbear

+0

Да, я пробовал «кодирование:« utf-8'', тот же результат. Im, использующий Body Parser: 'app.use (bodyParser.urlencoded ({extended: false}));' и 'app.use (bodyParser.json());' Когда я регистрирую форму Data перед отправкой запроса, я получаю то, что выглядит как объект javascript '{first_name: 'é'}' – gethyn1

+0

Вы сказали, что получаете «те же результаты», когда обходите вызов ajax? Вы хотите напрямую отправить данные третьей стороне? Тогда это работает? – Charminbear

ответ

1

После изучения кодировки символов я обнаружил, что проблема связана с многобайтовой кодировкой различных символов (быстрый google найдет хорошие сообщения SO по этому вопросу).

Мне показалось странным, что запрос не обрабатывал это автоматически, поэтому я играл с синтаксисом Request и смог исправить эту проблему. Вот мой пересмотренный код, который работает:

request(
    { 
     url: 'https://testurl.com/api/', 
     method: 'POST', 
     json: true, 
     headers: { 
      'content-type': 'application/json' 
     }, 
     body: formData 
    }, 
    function (error, response, body) { 
     ...  
    } 
); 
Смежные вопросы