【发布时间】: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