Jquery忽略ISO-8859-1编码

11
我有一个网站,似乎会从字符串中去掉正确的编码(ISO-8859-1)并发送错误的内容。
我已经在我的HTML中指定了这种编码。
<meta charset="ISO-8859-1">
我通过以下方式加载我的 JavaScript:

<script type="text/javascript" charset="ISO-8859-1" src="...

我通过 JQuery Ajax 请求发送信息,像这样(包含德语特殊字符 'ö' 和 'ä'):

$.ajax({
    url: '..',
    type: 'POST',
    contentType: 'application/xml;charset=ISO-8859-1',
    data: xmlRequest.html(),...

这被翻译成了一个请求,在Chrome开发者工具中,我可以在请求头中看到它:

..
Content-Type: application/xml;charset=UTF-8
..

发生了什么事?

当然,特殊字符被错误地编码了(使用 "ö" 代替 "ö"),服务器无法理解我所发送的内容,因此我会得到一个错误。


你需要设置你的Web服务器头部信息,这不是JavaScript可以实现的,它是一个服务器端的功能。 - stian.net
2个回答

34

因为我曾经遇到同样的问题,所以我将提供一个对我有用的解决方案。背景:Microsoft Excel太愚蠢了,无法导出UTF-8字符集的CSV文件:

$.ajax({
    url: '...',
    contentType: 'Content-type: text/plain; charset=iso-8859-1',
    // This is the imporant part!!!
    beforeSend: function(jqXHR) {
        jqXHR.overrideMimeType('text/html;charset=iso-8859-1');
    }
});

1
感谢您发布这个! - Felix Alcala
如何在不使用jQuery的情况下,直接通过XMLHttpRequest()来完成这个操作? - Luis A. Florit
这个代码会真的发送请求吗?我加了这段代码后我的请求无法“post” :( - Christian Moen
应该是的。你确定你的代码被执行了吗? - iappwebdev
它对我来说不起作用。我想通过POST将一些数据发送到另一个页面,但好像POST变量没有被发送。 - WitnessTruth

8

这是一个jQuery的事情还是Ajax通用的? - Spike2050
2
根据同一文档页面,“POST数据将始终使用UTF-8字符集传输到服务器,符合W3C XMLHTTPRequest标准。” - JMM

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接