编码地狱! JSON ajax请求(utf-8)为Latin1大写字符

时间:2011-11-10 12:03:20

标签: javascript ajax json encoding utf-8

我遇到了以下问题:我正在使用的javascript lib使用JSON跨域请求从Ruby on Rails后端获取数据:

function getData()
{
    $.ajaxSetup({ 'beforeSend': function(xhr) {xhr.setRequestHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8")} })

    $.ajax({ 
                url: backend_server + '?callback=parseData&op=516',
        contentType: "application/json; charset=utf-8",
        dataType: 'jsonp',
        success: function (xml) {
           //console.log('success');
        }
    });
}

RoR获取数据的数据库在内部使用 latin1 但是,如果内存服务正确,则此类JSON请求只能使用UTF-8完成。

网页的标题为:

Content-Type    text/html; charset=ISO-8859-1

页面的元标记也是ISO-8859-1:

<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>

现在,在从请求中获取数据后,我的Javascript库将解析它,并最终将其附加到页面内的某个div(使用最新的JQuery,而不是重要)。所有拉丁字符都显示不正确。

我注意到不同的浏览器对这些字符的解释不同(对于某些人来说,它工作得很好,对其他人来说......不是那么多)。我结束了对utf8_decode函数的轻微更改我发现here(检测用户代理并完全跳过Safari,IE和Opera的处理)但最后我仍然无法显示特殊的拉丁大写字符as “É”,“Ç”,“À”,“Á”,“”或“Ô。

有什么想法吗?我很失落,可以使用一些提示。 提前致谢, 学家

PS:关于该功能网站的最高评论也是我的。

Edit1:我也尝试使用unescape(encodeURIComponent(str_data)),但它无法正常使用

1 个答案:

答案 0 :(得分:4)

如果页面是拉丁语,并且服务器使用拉丁语,为什么你希望你的json是utf-8。 JSON不一定是utf-8!

尝试从上面代码中的contentType参数中删除utf-8。