我有一个输出 JSON 的 servlet。 Servlet 的输出编码是 ISO-8859-1。我们的网络应用程序中的页面也设置为 ISO-8859-1。我会使用 UTF-8,但这超出了我的控制范围;我们必须使用 ISO-8859-1。
当我单独点击servlet时,我可以看到已经输出的JSON数据。字符编码是正确的,并且没有一个字符看起来很奇怪。
然而,当我通过 AJAX 调用 servlet 并使用检索到的数据填充选择框时,我得到 � 代替(看起来)所有带重音的字符(例如带有重音或锐音、分音符号或扬抑符号的 i) )。当我查看 Firebug 下的“网络”选项卡中的响应时,我可以看到文本看起来不错。但是,当我使用该数据填充选择框时,我得到了带问号的菱形。
这些字符都是有效的 ISO-8859-1 字符,所以我不明白为什么它们没有正确显示。
EDIT
更多信息。我用GET
in jQuery.ajax
我已经设置了scriptCharset
to ISO-8859-1
。在服务器端,我已使用以下命令将编码显式设置为 ISO-8859-1request.setCharacterEncoding("ISO-8859-1");
EDIT
代码示例:
这就是我目前所拥有的。我添加了scriptCharset: "ISO-8859-1"
没有效果。
jQuery.ajax({
url: "/countryAndProvinceCodeServlet",
data: data,
dataType: "json",
type: "GET",
success: function(data) {
...
},
});
我的servlet使用org.json.JSONObject
并简单地输出字符串response.getWriter().print(jsonObject.toString());
UPDATE
根据有关 JSON 的评论以及它应该如何为 UTF-8,我尝试查看是否可以将数据作为文本获取(因此设置dataType
to text
in jQuery.ajax
),然后我自己将其评估为 JSON(在 Javascript 中)。这似乎也不起作用!当我做console.log
,我仍然得到了时髦的钻石。然而,当我在 Firebug 的“网络”选项卡下查看它时,一切都显示正常:
Net tab:
{"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 对数据做了一些奇怪的事情。