XMLHttpRequest.Отправляйте данные НЕ в UTF-8.Миссия невыполнима? - PullRequest
4 голосов
/ 14 октября 2011

Мне нужно отправить данные с использованием XMLHttpRequest (метод POST) на сервер.

Условия и ограничения:

  1. Сервер всегда предполагает, что кодировка символов только для windows-1251.
  2. Я не могу ничего изменить на стороне сервера.Сервер не мой.
  3. Мой код должен работать в FF, Chrome и IE8 :-( Я экспериментировал с sendAsBinary, но безуспешно.

Как я вижу, XMLHttpRequest раньшеотправка всегда изменяет данные в UTF-8, поэтому проблема не может быть решена. Верно?

1 Ответ

1 голос
/ 07 января 2013

Вы говорите: «XMLHttpRequest перед отправкой всегда изменяет данные в UTF-8».

ЭТО НЕПРАВИЛЬНО !!!XMLHttpRequest должен быть закодирован перед отправкой, кодировка определяется документом self.

для html5, вы можете использовать <meta charset="YOUR-ENCODING-HERE">.для html или xhtml вы должны использовать <meta http-equiv="Content-Type" content="text/html; charset=YOUR-ENCODING-HERE-WITHOUT-QUOTES">.для xml вы можете использовать <?xml version="1.0" encoding="YOUR-ENCODING-HERE"?>.

, затем, перед XMLHttpRequest.send (), вы должны XMLHttpRequest.setRequestHeader("Content-type","SOME-OTHER-DECLARATION; charset=YOUR-ENCODING-HERE-WITHOUT-QUOTES");.

Учитывая все вышесказанное, независимо от того, какая кодировка вашего сервера по умолчанию предполагает, он будет использовать кодировку, которую предлагает запрос (если он поддерживает), для декодирования URI.

Существует другой способ сделать это.

Я не знаю, какой язык программирования используется на вашей стороне сервера.Для Java вы можете использовать, скажем, str - это строка, полученная сервером, newStr = new String(str.getBytes("SERVER-ASSUMED-CHAR-ENCODING"), "YOUR-HTML-ENCODING");

В вашем случае это будет newStr = new String(str.getBytes("windows-1251"), "UTF-8");.И newStr должен быть читаемыми данными.

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