Как установить кодировку в .getJSON jQuery
-
09-06-2019 - |
Вопрос
В моем веб-приложении я отправляю некоторые поля формы с помощью jQuery $.getJSON()
способ.У меня возникли некоторые проблемы с кодировкой.Набор символов моего приложения следующий charset=ISO-8859-1
, но я думаю , что эти поля представлены с UTF-8
.
Как я могу установить кодировку, используемую в $.getJSON
звонки?
Решение
Я думаю, что вам, вероятно, придется использовать $.ajax()
если вы хотите изменить кодировку, смотрите раздел contentType
приведенный ниже параметр (the success
и error
обратные вызовы предполагают, что у вас есть <div id="success"></div>
и <div id="error"></div>
в html):
$.ajax({
type: "POST",
url: "SomePage.aspx/GetSomeObjects",
contentType: "application/json; charset=utf-8",
dataType: "json",
data: "{id: '" + someId + "'}",
success: function(json) {
$("#success").html("json.length=" + json.length);
itemAddCallback(json);
},
error: function (xhr, textStatus, errorThrown) {
$("#error").html(xhr.responseText);
}
});
На самом деле мне просто пришлось сделать это около часа назад, какое совпадение!
Другие советы
Если вы хотите использовать $.getJSON()
вы можете добавить следующее перед вызовом :
$.ajaxSetup({
scriptCharset: "utf-8",
contentType: "application/json; charset=utf-8"
});
Вы можете использовать нужную кодировку вместо utf-8
.
Описываются возможные варианты здесь.
contentType :
При отправке данных на сервер используйте это content-type
.Значение по умолчанию равно application/x-www-form-urlencoded
, что вполне нормально для большинства случаев.
scriptCharset :
Только для запросов с jsonp
или script
Тип данных и ПОЛУЧАЕМЫЙ тип.Заставляет интерпретировать запрос как определенную кодировку.Требуется только для определения различий в кодировке между удаленным и локальным контентом.
Возможно , вам понадобится один или оба варианта ...
Вам нужно проанализировать вызовы JSON с помощью Wireshark, так вы увидите, включаете ли вы кодировку при формировании страницы JSON или нет, например:
- Если страница простая, если текстовая / html
0000 48 54 54 50 2f 31 2e 31 20 32 30 30 20 4f 4b 0d HTTP/1.1 200 OK. 0010 0a 43 6f 6e 74 65 6e 74 2d 54 79 70 65 3a 20 74 .Content -Type: t 0020 65 78 74 2f 68 74 6d 6c 0d 0a 43 61 63 68 65 2d ext/html ..Cache- 0030 43 6f 6e 74 72 6f 6c 3a 20 6e 6f 2d 63 61 63 68 Control: no-cach
- Если страница имеет тип, включающий пользовательский JSON с MIME "charset = ISO-8859-1"
0000 48 54 54 50 2f 31 2e 31 20 32 30 30 20 4f 4b 0d HTTP/1.1 200 OK. 0010 0a 43 61 63 68 65 2d 43 6f 6e 74 72 6f 6c 3a 20 .Cache-C ontrol: 0020 6e 6f 2d 63 61 63 68 65 0d 0a 43 6f 6e 74 65 6e no-cache ..Conten 0030 74 2d 54 79 70 65 3a 20 74 65 78 74 2f 68 74 6d t-Type: text/htm 0040 6c 3b 20 63 68 61 72 73 65 74 3d 49 53 4f 2d 38 l; chars et=ISO-8 0050 38 35 39 2d 31 0d 0a 43 6f 6e 6e 65 63 74 69 6f 859-1..C onnectio
Почему это так?потому что мы не можем поместить на страницу JSON такую цель, как эта:
В моем случае я использую производитель Connect Me 9210 Digi:
- Мне пришлось использовать флаг, чтобы указать, что можно использовать нестандартный MIME:p-> theCgiPtr-> = fDataType eRpDataTypeOther;
- Он добавил новый MIME в переменную:strcpy (p-> theCgiPtr-> fOtherMimeType, "текст / html;кодировка = ISO-8859-1 ");
У меня это сработало без необходимости преобразовывать данные, переданные JSON , в UTF-8, а затем повторять преобразование на странице ...
Использование encodeURI()
в клиентском JS и использовать URLDecoder.decode()
на стороне сервера работает Java.
Пример:
Javascript:
$.getJSON( url, { "user": encodeURI(JSON.stringify(user)) }, onSuccess );
Java:
java.net.URLDecoder.decode(params.user, "UTF-8");
Используйте эту функцию для восстановления символов utf-8
function decode_utf8(s) {
return decodeURIComponent(escape(s));
}
пример:
var new_Str=decode_utf8(str);