首页 > 解决方案 > json 响应中的特殊字符在 IE 中未解析

问题描述

我在 js 文件中使用以下代码从 servlet 获取响应,如下所示: 在此处输入图像描述

代码如下:

  function(response){
    $("#city").attr("disabled", false);
    var select = $('#cityList');
    select.find('option').remove();
    var parsedObject = JSON.parse(response);      
    for(var city in parsedObject){           
   $('<option>').val(parsedObject[city].cityName).text(parsedObject[city].cityName).appendTo(select);}}

在 Internet Explorer 中,我收到一条错误消息,指出以下行中的“无效字符”:var parsedObject = JSON.parse(response);

检查响应后,我注意到城市名称导致问题的对象: {"countryId":0,"stateId":0,"cityId":4046,"cityName":"Belle Vall�}

正确的城市名称是 Belle Vallée。似乎 IE 不允许解析此城市名称,因此下拉列表中不显示城市值。

在 Google Chrome 中,我确实看到了所有城市值,但是,上述城市名称未正确显示,如下所示:

在此处输入图像描述

我遇到了一个解决方案,可以在标题中添加以下代码以允许 chrome 正确显示特殊字符,但它对我不起作用。

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" >

以下代码正在 servlet 端执行:

在此处输入图像描述

这就是我的带有 ajax 调用的新函数的样子:

function changeState(){
    var state = $("input#province").val();   
            
    $.ajax({
        type: "GET",    
        url : 'LocationServlet',
        dataType : "json",
        contentType: "application/json; charset=utf-8",
        data : {"stateName": state},        
        success : function(response){
        $("#city").attr("disabled", false);
        var select = $('#cityList');
        select.find('option').remove();
        var parsedObject = JSON.parse(response);

        for(var city in parsedObject){
            $('<option>').val(parsedObject[city].cityName).text(parsedObject[city].cityName).appendTo(select);
        }
      } 
    });     
}

标签: javascriptjqueryjsonservlets

解决方案


添加

response.setCharacterEncoding("UTF-8");

如果您的响应来自 ajax 调用。只需检查您的 ajax 调用的内容类型。

$.ajax({
    type: "GET",
    dataType : "json",
    contentType: "application/json; charset=utf-8",
    ...
})

推荐阅读