【发布时间】:2016-03-22 17:40:14
【问题描述】:
我在 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 格式发送!所以转换不是问题?
【问题讨论】:
-
好吧,那些不是
Latin字符,但我离题了。你能展示一些相关的代码吗?也许有什么问题。我最初的猜测是服务器需要%编码的数据,您可以在发送之前通过encodeURIComponent获取这些数据。 -
@wOxxOm 是的,我已经尝试过了。更新的问题来回答你。如果不是拉丁语,我会怎么称呼他们?
-
Accented characters可能是我见过的最明确的术语。至于问题:Jquery ignores encoding ISO-8859-1 -
当我发送 POST 数据时,我认为这是没有选择的。试过了,没有成功。引用:
Data will always be transmitted to the server using UTF-8 charset; you must decode this appropriately on the server side.
标签: javascript jquery ajax google-chrome google-chrome-extension