В своем веб-приложении я отправляю некоторые поля формы с помощью метода jQuery $.getJSON(). У меня проблемы с кодировкой. Набор символов моего приложения - charset=ISO-8859-1, но я думаю, что эти поля представлены с UTF-8.
Как я могу установить кодировку, используемую в вызовах $.getJSON?

Я думаю, что вам, вероятно, придется использовать $.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);
}
});
На самом деле мне пришлось сделать это около часа назад, какое совпадение!
Я только что понял, что вы переопределяете объект хоста XMLHttpRequest внутри метода ошибки. Это просто вопрос хорошей практики кодирования, чтобы не сбивать с толку других разработчиков;) Я бы предложил переименовать его во что-нибудь другое;)
Намного лучше :) (на самом деле обычно я называю его так же, как и сейчас:>)
Согласно ответу это, недопустимо указывать кодировку для application/json.
Если вы хотите использовать $.getJSON(), вы можете добавить следующее перед вызовом:
$.ajaxSetup({
scriptCharset: "utf-8",
contentType: "application/json; charset=utf-8"
});
Вы можете использовать желаемую кодировку вместо utf-8.
Опции поясняются здесь.
contentType : При отправке данных на сервер используйте этот content-type. По умолчанию используется application/x-www-form-urlencoded, что подходит для большинства случаев.
scriptCharset : Только для запросов с типом данных jsonp или script и типом GET. Заставляет интерпретировать запрос как определенную кодировку. Требуется только для различий в кодировке между удаленным и локальным контентом.
Вам может понадобиться один или оба ...
привет, Пат, у меня такая же проблема с установкой типа контента с помощью метода getJSON. Я использовал $ .ajaxSetup непосредственно перед вызовом getJSON, но никаких изменений не происходит, «нордические» символы становятся ненужными в моей БД. не могли бы вы сказать мне точный порядок вызова методов? спасибо
Согласно ответу это, недопустимо указывать кодировку для application/json.
У меня была аналогичная проблема с публикацией, и я использовал вызов $ .ajax (...) вместо $ .post (...), потому что у меня не было способа изменить тип содержимого. Это позволяет мне использовать сокращенную нотацию $ .post для соответствия используемому мной $ .get. Я считаю, что это должен быть принятый ответ, потому что он работает и позволяет использовать $ .getJSON ().
Используйте encodeURI() в клиентском JS и используйте URLDecoder.decode() на стороне сервера Java.
Пример:
Javascript:
$.getJSON(
url,
{
"user": encodeURI(JSON.stringify(user))
},
onSuccess
);
Ява:
java.net.URLDecoder.decode(params.user, "UTF-8");
Вам нужно проанализировать вызовы JSON с помощью Wireshark, чтобы вы увидели, включаете ли вы кодировку в формирование страницы JSON или нет, например:
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
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:
Это сработало для меня без необходимости преобразовывать данные, переданные JSON для UTF-8, а затем повторять преобразование на странице ...
Используйте эту функцию, чтобы восстановить символы UTF-8
function decode_utf8(s) {
return decodeURIComponent(escape(s));
}
Пример: var new_Str = decode_utf8 (строка);
Если вы хотите использовать $ .getJSON (), вы можете добавить следующее перед вызовом:
$.ajaxSetup({
scriptCharset: "utf-8",
contentType: "application/json; charset=utf-8"
});
Простите, но чем ваш ответ отличается от 11 лет @Pat перед вашим?
Согласно ответу это, недопустимо указывать кодировку для
application/json.