Как установить кодировку в .getJSON jQuery
В моем веб-приложении я отправляю некоторые поля формы с помощью метода jQuery $.getJSON()
. У меня проблемы с кодировкой. Набор символов моего приложения - charset=ISO-8859-1
, но я думаю, что эти поля отправляются с UTF-8
.
Как установить кодировку, используемую в вызовах $.getJSON
?
Ответы
Ответ 1
Я думаю, что вам, вероятно, придется использовать $.ajax()
, если вы хотите изменить кодировку, см. параметр contentType
ниже (обратные вызовы 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);
}
});
Мне просто нужно было сделать это примерно час назад, какое совпадение!
Ответ 2
Если вы хотите использовать $.getJSON()
, перед вызовом вы можете добавить следующее:
$.ajaxSetup({
scriptCharset: "utf-8",
contentType: "application/json; charset=utf-8"
});
Вы можете использовать кодировку, которую вы хотите, вместо utf-8
.
Параметры объясняются здесь.
contentType :
При отправке данных на сервер используйте content-type
. По умолчанию используется application/x-www-form-urlencoded
, что отлично подходит для большинства случаев.
scriptCharset :
Только для запросов с типом jsonp
или script
dataType и GET. Заставляет запрос интерпретироваться как определенную кодировку. Требуется только для разногласий между удаленным и локальным контентом.
Возможно, вам понадобится один или оба...
Ответ 3
Вам нужно проанализировать вызовы 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 eRpDataTypeДругое;
- Он добавил новый MIME в переменную: strcpy (p- > theCgiPtr- > fOtherMimeType, "text/html;
charset = ISO-8859-1 ");
Он работал у меня без необходимости конвертировать данные, переданные JSON для UTF-8, а затем повторить преобразование на странице...
Ответ 4
Используйте encodeURI()
в JS клиента и используйте URLDecoder.decode()
в стороне сервера Java.
Пример:
-
Javascript
$.getJSON(
url,
{
"user": encodeURI(JSON.stringify(user))
},
onSuccess
);
-
Java
java.net.URLDecoder.decode(params.user, "UTF-8");
Ответ 5
Используйте эту функцию для восстановления символов utf-8
function decode_utf8(s) {
return decodeURIComponent(escape(s));
}
Пример:
var new_Str=decode_utf8(str);
Ответ 6
Решение travis всегда работает в моем случае, когда мне нужны международные персонажи.