FireFox的UTF-16字符编码问题

时间:2012-03-15 17:22:38

标签: javascript firefox tfs2012 utf-16 byte-order-mark

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

我正在使用TFS11 Web访问API来创建自定义工作项控件。那个应该无关紧要,但足以说我不能随意乱搞任何网络服务器设置或应用程序发送数据的方式。

一般工作流程是控件下拉附件文件,将其解析为XML,然后使用XML以便为最终用户呈现数据。这一切都在IE8,IE9和Chrome中完美运行。但是,在FireFox 11中,它没有。

这是一段代码,演示了我如何抓取我的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中,它包含��<?�x�m�l� �v�e�r�s�i�o�n�=�"�1�.�0�"� �e�n�c�o�d�i�n�g�=�"�u�t�f�-�1�6�"�?�>(依此类推)。

前两个字符是FF FE。我已经阅读了它,我知道这是Byte Order Marker。我不明白的是为什么我看到了这个而不是正确编码的文本。

以下是请求中的响应标头:

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

有解决方法吗?

1 个答案:

答案 0 :(得分:3)

在回复中发送正确的编码?看起来Firefox没有查看数据中的BOM,因此没有意识到您的数据是UTF-16而不是UTF-8 ....