У меня есть сервлет, который выводит JSON. Выходная кодировка для сервлета - ISO-8859-1. Страницы в нашем веб-приложении также настроены на ISO-8859-1. Я бы использовал UTF-8, но это вне моего контроля; мы должны использовать ISO-8859-1.
Когда я сам нажимаю на сервлет, я вижу данные JSON, которые были выведены. Кодировка символов правильная, и ни один из символов не выглядит странно.
Однако, когда я вызываю сервлет через AJAX и использую полученные данные для заполнения поля выбора, я получаю вместо (кажется) всех символов, которые имеют акценты (например, я с серьезным или острым акцентом, dieresis или круговой). Когда я смотрю на ответ на вкладке Net под Firebug, я вижу, что текст выглядит хорошо. Однако, когда я использую эти данные для заполнения поля выбора, я получаю метку с бриллиантом.
Все эти символы являются действительными символами ISO-8859-1, и поэтому я не понимаю, почему они отображаются неправильно.
EDIT
Еще немного информации. Я использую GET
в jQuery.ajax
, и я установил scriptCharset
в ISO-8859-1
. На стороне сервера я явно установил кодировку ISO-8859-1, используя request.setCharacterEncoding("ISO-8859-1");
РЕДАКТИРОВАТЬ
Примеры кода:
Это то, что у меня сейчас. Я добавил scriptCharset: "ISO-8859-1"
безрезультатно.
jQuery.ajax({
url: "/countryAndProvinceCodeServlet",
data: data,
dataType: "json",
type: "GET",
success: function(data) {
...
},
});
Мой сервлет использует org.json.JSONObject
и просто выводит строку, выполняя response.getWriter().print(jsonObject.toString());
UPDATE
По комментариям о JSON и о том, как это должно быть UTF-8, я пытался посмотреть, смогу ли я получить данные в виде текста (поэтому установите dataType
в text
в jQuery.ajax
) и затем оцените их как JSON сам (в JavaScript). Это тоже не работает! Когда я делаю console.log
, я все еще получаю яркие бриллианты. Однако, когда я смотрю на вкладку «Сеть» в Firebug, все выглядит нормально:
Чистая вкладка:
{"error":false,
"provinces":{"DZ-01":"Adrar",
"DZ-16":"Alger",
"DZ-23":"Annaba",
"DZ-44":"Aïn Defla",
"DZ-46":"Aïn Témouchent",
"DZ-05":"Batna",
"DZ-07":"Biskra",
"DZ-09":"Blida",
"DZ-34":"Bordj Bou Arréridj",
"DZ-10":"Bouira",
"DZ-35":"Boumerdès",
"DZ-08":"Béchar",
"DZ-06":"Béjaïa",
"DZ-02":"Chlef",
"DZ-25":"Constantine",
"DZ-17":"Djelfa",
"DZ-32":"El Bayadh",
"DZ-39":"El Oued",
"DZ-36":"El Tarf",
"DZ-47":"Ghardaïa",
"DZ-24":"Guelma",
"DZ-33":"Illizi",
"DZ-18":"Jijel",
"DZ-40":"Khenchela",
"DZ-03":"Laghouat",
"DZ-29":"Mascara",
"DZ-43":"Mila",
"DZ-27":"Mostaganem",
"DZ-28":"Msila",
"DZ-26":"Médéa",
"DZ-45":"Naama",
"DZ-31":"Oran",
"DZ-30":"Ouargla",
"DZ-04":"Oum el Bouaghi",
"DZ-48":"Relizane",
"DZ-20":"Saïda",
"DZ-22":"Sidi Bel Abbès",
"DZ-21":"Skikda",
"DZ-41":"Souk Ahras",
"DZ-19":"Sétif",
"DZ-11":"Tamanghasset",
"DZ-14":"Tiaret",
"DZ-37":"Tindouf",
"DZ-42":"Tipaza",
"DZ-38":"Tissemsilt",
"DZ-15":"Tizi Ouzou",
"DZ-13":"Tlemcen",
"DZ-12":"Tébessa"}}
Но когда я делаю console.log(text)
с тем, что получаю от jQuery.ajax
, я получаю следующее:
{"error":false,
"provinces":{"DZ-01":"Adrar",
"DZ-16":"Alger",
"DZ-23":"Annaba",
"DZ-44":"A�n Defla",
"DZ-46":"A�n T�mouchent",
"DZ-05":"Batna",
"DZ-07":"Biskra",
"DZ-09":"Blida",
"DZ-34":"Bordj Bou Arr�ridj",
"DZ-10":"Bouira",
"DZ-35":"Boumerd�s",
"DZ-08":"B�char",
"DZ-06":"B�ja�a",
"DZ-02":"Chlef",
"DZ-25":"Constantine",
"DZ-17":"Djelfa",
"DZ-32":"El Bayadh",
"DZ-39":"El Oued",
"DZ-36":"El Tarf",
"DZ-47":"Gharda�a",
"DZ-24":"Guelma",
"DZ-33":"Illizi",
"DZ-18":"Jijel",
"DZ-40":"Khenchela",
"DZ-03":"Laghouat",
"DZ-29":"Mascara",
"DZ-43":"Mila",
"DZ-27":"Mostaganem",
"DZ-28":"Msila",
"DZ-26":"M�d�a",
"DZ-45":"Naama",
"DZ-31":"Oran",
"DZ-30":"Ouargla",
"DZ-04":"Oum el Bouaghi",
"DZ-48":"Relizane",
"DZ-20":"Sa�da",
"DZ-22":"Sidi Bel Abb�s",
"DZ-21":"Skikda",
"DZ-41":"Souk Ahras",
"DZ-19":"S�tif",
"DZ-11":"Tamanghasset",
"DZ-14":"Tiaret",
"DZ-37":"Tindouf",
"DZ-42":"Tipaza",
"DZ-38":"Tissemsilt",
"DZ-15":"Tizi Ouzou",
"DZ-13":"Tlemcen",
"DZ-12":"T�bessa"}}
Мне кажется, что jQuery делает что-то странное с данными.