【问题标题】:UTF-16 character encoding issue with FireFoxFireFox 的 UTF-16 字符编码问题
【发布时间】:2012-04-01 06:24:39
【问题描述】:

我遇到了一个似乎无法解决的 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。我已经阅读了它,我知道这是字节顺序标记。我不明白的是为什么我看到的是这个而不是正确编码的文本。

这是我的请求响应标头:

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

有解决办法吗?

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 就像我说的,发送数据的应用程序是 TFS11。我完全没有能力改变它提供数据的方式。在这一点上,我非常确信它要么是 Firefox 中的错误,要么是 TFS11 中的错误,但我不知道是哪一个。 :)
    • 这里有没有办法影响服务器发送的headers?实际上,这两者都是一个错误:服务器应该指示编码,而 Firefox 可能应该正在寻找 BOM。您可以通过在调用 send() 之前对 XHR 对象调用 overrideMimeType("text/plain; charset=UTF-16") 来解决此问题。不确定如何在您正在使用的库中执行此操作。
    • 解决了!我必须在我的.ajax 电话中添加以下内容:beforeSend: function (xhr) { xhr.overrideMimeType('text/plain; charset=UTF-16'); }, 谢谢!
    • 它在 FF 中修复了,我在 IE 中也遇​​到了同样的问题,但在那里没有修复。你知道如何在 IE 中修复吗?
    • @ccsakuweb 抱歉,不知道 IE。
    猜你喜欢
    • 1970-01-01
    • 2015-01-28
    • 1970-01-01
    • 1970-01-01
    • 2014-01-18
    • 2012-10-12
    • 2014-09-07
    • 2012-03-13
    • 2019-02-02
    相关资源
    最近更新 更多