javascript - Chrome 扩展 ajax 发送格式错误的重音字符

标签 javascript jquery ajax google-chrome google-chrome-extension

我在 chrome 扩展上使用 jQuery 发送 AJAX POST 请求,但数据没有按预期到达,重音字符格式错误。

文本“HÄGERSTEN”变为“HÄGERSTEN”。

文本在控制台等中显示正常,只有通过 AJAX 到此其他页面时,它才会如前所述显示。我的 AJAX 调用是基本的,我通过 jQuery $.ajax 发送一个数据对象。我尝试过使用和不使用 contentType、UTF-8 和 ISO-8859-1。没有区别。

这就是我进行 AJAX 调用的方式:

var newValues = {name: 'HÄGERSTEN'}

$.ajax({
    url: POST_URL,
    type: 'POST',
    data: newValues,
    success: function() ...
});

newValues 对象有更多值,但我从表单中检索它们。但是,我尝试将这些值手动指定为 newValues['name'] = 'ÄÄÄÄ'; 并且仍然会导致同样的问题。

我将 AJAX 发送到的页面的原始表单元素包含属性 accept-charset="iso-8859-1"。也许这很重要。

目标网站正在使用 Servlet/2.5 JSP/2.1。以防万一它可能会有所作为。

我认为这是一个编码问题,据我所知,这应该是因为 Chrome 扩展程序要求脚本文件采用 UTF-8 编码,这可能与插件运行的网站和目标 AJAX 页面(相同网站)使用 ISO-8859-1 编码,但我不知道如何处理它。我尝试了几种将其解码/编码为 UTF-8 和 ISO-8859-1 以及其他技巧的方法,但均未成功。

我尝试在我的值上使用 encodeURIComponent,这只会让它们在显示我通过 POST 发送的值的表单上以这种方式显示,例如H%C3%84GERSTEN

我无法访问网站服务器,也无法告诉您这是否是他们方面的问题,但我不这么认为。

更新

现在我明白了 POST 数据必须以 UTF-8 格式发送!所以转换不是问题?

最佳答案

似乎数据在发送时是 UTF-8 编码的,在服务器端没有正确解码。它必须在服务器端解码。使用以下编码和解码函数对其进行测试:

function encode_utf8(s) {
  return unescape(encodeURIComponent(s));
}

function decode_utf8(s) {
  return decodeURIComponent(escape(s));
}

var encoded_string = encode_utf8("HÄGERSTEN");
var decoded_string = decode_utf8(encoded_string);
document.getElementById("encoded").innerText = encoded_string;
document.getElementById("decoded").innerText = decoded_string;
<div>
Encoded string: <span id="encoded"></span>
</div>
<div>
Decoded string: <span id="decoded"></span>
</div>

关于javascript - Chrome 扩展 ajax 发送格式错误的重音字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34314511/

相关文章:

javascript - 当我的javascript修改html并显示AJAX结果时,如何在新页面中显示结果?

javascript - 将标签添加到外观和感觉都像地方的自定义标记

javascript - 跨选项卡安排访问 token 刷新

jquery - 在 jquery mobile 本地存储 json

jquery - 将同一行上的所有 DIVS 设置为相同的高度......但每行不同

javascript - ajax请求超时2分钟

php - 到达json中的php数组元素

javascript - jQuery:单击ajax时,获取完成/失败中单击的对象?

php - 在 PHP 中获取 cookies 参数?

大型项目(社交媒体)的 Javascript/jQuery 优化