javascript - 编码 hell ! JSON ajax 请求 (utf-8) 到 Latin1 大写字符

标签 javascript ajax json encoding utf-8

我遇到了以下问题:我正在处理的 javascript 库使用 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 的处理)但最终我仍然无法显示特殊的拉丁大写字符,例如 "É"、"Ç"、"À"、"Á”、“”或“Á”。

有什么想法吗?我很迷茫,可以使用一些技巧。 提前致谢, J.

PS:该函数网站上的最高评论也是我的。

Edit1:我也尝试过使用 unescape(encodeURIComponent(str_data)) 但它也不起作用

最佳答案

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

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

关于javascript - 编码 hell ! JSON ajax 请求 (utf-8) 到 Latin1 大写字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8079216/

相关文章:

javascript - 鼠标悬停时CSS背景图像移动

php - 如何通过 Ajax 将数据从 PHP 变量发送到 JavaScript?

javascript - Tapestry 5.3 如何使用按钮检索文本字段值但不提交表单

javascript - 为什么 Chrome Canary 不支持我的 Threejs AR [ARCore] Web 应用程序?

javascript - 由于重定向,Greasemonkey 脚本在提交表单后停止执行

json - Play Framework : How to convert strings to numbers while validating JSON

java - 从 jsonArray java android 获取字符串

javascript - 将对象数组和嵌套数组转换为 JSON

Javascript隐藏div并显示

Jquery - 将 Ajax jSON 响应存储为变量