jQuery ajax+responseText+字符编码


jQuery ajax + responseText + Character encoding

我用JavaScript和jQuery库对PHP脚本执行AJAX请求
这是我执行AJAX请求的命令:

$.ajax({
    async: "false",
    cache: "false",
    data: {login: strLogin, password: strPassword},
    datatype: "text",
    error: connexionAjaxError,
    success: connexionAjaxSuccess,
    type: "POST",
    url: "./Connexion"
});

".Connexion"是指向我的PHP脚本的URL重定向
connexionAjaxError是一个一旦收到HTTP响应就不可避免地执行的JavaScript函数
原因:我的PHP脚本生成了一个文本/纯文本页面,HTTP状态代码等于500。
以下是我的PHP脚本中最相关的部分:

header("HTTP/1.0 500 Internal Server Error; 
        Content-type: text/plain; 
        charset=ISO-8859-1");
echo "été";

这是connexionAjaxError回调函数的签名:

function connexionAjaxError(jqXHR, textStatus, errorThrown)

我的PHP结果为字符串"été"
我的PHP内部编码是ISO-8859-1,因此结果字符串以十六进制表示法编码[e9 74 e9]。

但是connexionAjaxError回调函数中的jqXHR.responseText包含一个1个字符的字符串
我使用了JavaScriptString对象的charCodeAt方法来获取该字符的unicode(UTF-8?)代码
该字符以十进制表示法编码65535,相当于十六进制表示法中的[ff-ff]。

我不明白为什么jqXHR.responseText不包含3个字符的字符串"été"
我不是JavaScript专家,但我认为jqXHR.responseText只能包含UTF-8编码的字符串。
因此,jqXHR.responseText中的字符串"été"将以十六进制表示法编码[c3a9 74 c3a9]
我已从以下网站检索到字符"é"的UTF-8代码:http://www.utf8-chartable.de/

我用西班牙语做了很多开发,我注意到了一些可能对你有帮助的事情,因为我已经经历过了:

头函数中的字符集应该是UTF-8。

此外,FILE本身(PHP脚本)必须以UTF-8保存,如果使用Notepad++编辑文件并选择不带BOM的UTF-8编码,则可以轻松实现这一点。

javascript和HTML文件也是如此,它们都应该使用UTF-8编码,而不是使用BOM,而不是ANSI。

让我知道!

试着在调用中像这样设置Contenttype,据我所知,如果没有指定jQueryAjax,那么它总是utf-8。

$.ajax({
...
    datatype: "text",
    contentType: "application/x-www-form-urlencoded;charset=ISO-8859-1",
    error: connexionAjaxError,
    success: connexionAjaxSuccess,
    type: "POST",
...
});

编辑:如果我的答案没有帮助,如果你检查服务器的字符集配置,并发布它,可能会有所帮助。