2012-03-15 16 views
1

解決できないUTF-16でエンコードされたXMLとFirefoxの問題が発生しました。FireFoxでのUTF-16文字エンコーディングの問題

カスタムワークアイテムコントロールを作成するためにTFS11 WebアクセスAPIを使用しています。そのとは関係ありませんが、Webサーバーの設定やアプリケーションがデータを送信する方法を混乱させる自由がないと言うだけで十分です。

一般的なワークフローは、コントロールが添付ファイルをプルダウンし、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�"�?�>(など)が含まれています。

最初の2文字は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 

は、このための回避策はありますか?

答えて

3

あなたの回答に正しいエンコードを送信しますか?それはFirefoxがあなたのデータのBOMを見ていないように見えるので、あなたのデータがUTF-8ではなくUTF-16であることはわかりません。

+0

私が言ったように、データを送信するアプリケーションはTFS11です。データの提供方法を​​変更する能力は全くありません。この時点で、私はそれがFirefoxのバグかTFS11のバグのいずれかであると確信していますが、どちらがわからないのですか。 :) –

+1

ここでサーバーから送信されるヘッダーに影響する方法はありませんか?本当にそれは両方のバグです:サーバーはエンコードを示すはずで、FirefoxはおそらくBOMを探しているはずです。 send()を呼び出す前に、XHRオブジェクトのoverrideMimeType( "text/plain; charset = UTF-16")を呼び出すことで、この問題を回避できます。あなたが使用しているライブラリでそれを行う方法がわかりません。 –

+2

それはそれを修正しました!私は '.ajax'呼び出しに以下を追加しなければならなかった: ' beforeSend:function(xhr){ xhr.overrideMimeType( 'text/plain; charset = UTF-16'); }、「 ありがとうございます! –

関連する問題