【问题标题】:Encoding hell! JSON ajax request (utf-8) to Latin1 uppercase characters编码地狱! JSON ajax 请求 (utf-8) 到 Latin1 大写字符
【发布时间】:2011-11-10 12:03:20
【问题描述】:

我遇到了以下问题:我正在处理的 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,这并不重要)。所有拉丁字符显示不正确。

我注意到不同的浏览器对这些字符的解释不同(对于某些它可以正常工作,对于其他...不是那么多)。我最后对我找到的here 的 utf8_decode 函数进行了轻微更改(检测用户代理并完全跳过 Safari、IE 和 Opera 的处理)但最后我仍然无法显示特殊的拉丁大写字符,例如 “É”、“Ç”、“À”、“Á”、“”或“Ô。

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

PS:函数网站上的置顶评论也是我的。

Edit1:我也尝试过使用unescape(encodeURIComponent(str_data)),但也没有用

【问题讨论】:

  • 如果页面是拉丁文,而服务器使用拉丁文,你为什么要你的 json 是 utf-8。尝试从上面代码中的 contentType 参数中删除 utf-8。 (JSON 不必是 utf-8)
  • 嗯,我认为它必须!顶一下,谢谢!请回答问题,以便我接受。

标签: javascript ajax json encoding utf-8


【解决方案1】:

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

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

【讨论】:

  • 不一定是 UTF-8,但 spec sais JSON text SHALL be encoded in Unicode. The default encoding is UTF-8.
  • 您先生在这里绝对给出了错误的指示:" JSON 文本应以 Unicode 编码。默认编码为 UTF-8。" 可能是这样。感觉需要 unicode,
猜你喜欢
  • 2012-03-24
  • 1970-01-01
  • 2020-09-15
  • 2012-03-07
  • 2017-01-19
  • 1970-01-01
  • 1970-01-01
  • 2015-11-12
相关资源
最近更新 更多