Javascript FireFox的UTF-16字符编码问题

Javascript FireFox的UTF-16字符编码问题,javascript,firefox,utf-16,byte-order-mark,Javascript,Firefox,Utf 16,Byte Order Mark,我遇到了一个UTF-16编码的XML和Firefox的问题,我似乎无法解决 我正在使用TFS11 web访问API来创建自定义工作项控件。这应该是无关紧要的,但我可以说,我不能随意干扰任何web服务器设置或应用程序发送数据的方式 一般的工作流程是,控件提取附件文件,将其解析为XML,然后使用XML为最终用户呈现数据。这一切在IE8、IE9和Chrome中都能完美工作。然而,在Firefox11中,它并没有 下面是一段代码,演示如何获取XML并对其进行解析: $.ajax({ url: u

我遇到了一个UTF-16编码的XML和Firefox的问题,我似乎无法解决

我正在使用TFS11 web访问API来创建自定义工作项控件。这应该是无关紧要的,但我可以说,我不能随意干扰任何web服务器设置或应用程序发送数据的方式

一般的工作流程是,控件提取附件文件,将其解析为XML,然后使用XML为最终用户呈现数据。这一切在IE8、IE9和Chrome中都能完美工作。然而,在Firefox11中,它并没有

下面是一段代码,演示如何获取XML并对其进行解析:

$.ajax({
    url: uri,
    async: true,
    dataType: "text",
    complete: function (xhr, status) {
        if (xhr.responseText != null) {
            data = null; 
            if (window.DOMParser) {
                parser = new DOMParser();
                var responseText = xhr.responseText; 
                data = parser.parseFromString(responseText, "text/xml");
            }
        }
    }
});

问题在于
xhr.responseText
的内容。在FireFox中,它包含
�� 在响应中发送正确的编码?看起来Firefox没有查看您数据中的BOM,因此没有意识到您的数据是UTF-16而不是UTF-8….

正如我所说,发送数据的应用程序是TFS11。我完全没有能力改变它提供数据的方式。在这一点上,我非常确信这要么是Firefox中的一个bug,要么是TFS11中的bug,但我不知道是哪个。:)您无法影响此处服务器发送的标头吗?实际上,这两者都存在缺陷:服务器应该指示编码,Firefox可能应该查找BOM。在调用send()之前,您可能可以通过在XHR对象上调用OverrideMetype(“text/plain;charset=UTF-16”)来解决这个问题。不知道如何在你正在使用的库中执行此操作。这就解决了它!我不得不在我的
.ajax
调用中添加以下内容:
在发送之前:函数(xhr){xhr.overrideMetype('text/plain;charset=UTF-16');},
谢谢!它在FF中修复了,我在IE中也有同样的问题,但在那里没有修复。你知道如何修复IE吗?@ccsakuweb对不起,不知道IE。
HTTP/1.1 200 OK
Cache-Control: private
Content-Type: application/octet-stream
Server: Microsoft-IIS/7.5
X-TFS-ProcessId: 0bc401d6-0b5d-47a4-85b8-114344957d22
X-AspNetMvc-Version: 3.0
Content-Disposition: attachment; filename=d187d991-550a-4f49-b379-3bea7f9518c8.xml
X-AspNet-Version: 4.0.30319
Persistent-Auth: true
X-Powered-By: ASP.NET
X-Content-Type-Options: nosniff
X-FRAME-OPTIONS: SAMEORIGIN
Date: Thu, 15 Mar 2012 17:15:00 GMT
Content-Length: 7520