解決できない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
は、このための回避策はありますか?
私が言ったように、データを送信するアプリケーションはTFS11です。データの提供方法を変更する能力は全くありません。この時点で、私はそれがFirefoxのバグかTFS11のバグのいずれかであると確信していますが、どちらがわからないのですか。 :) –
ここでサーバーから送信されるヘッダーに影響する方法はありませんか?本当にそれは両方のバグです:サーバーはエンコードを示すはずで、FirefoxはおそらくBOMを探しているはずです。 send()を呼び出す前に、XHRオブジェクトのoverrideMimeType( "text/plain; charset = UTF-16")を呼び出すことで、この問題を回避できます。あなたが使用しているライブラリでそれを行う方法がわかりません。 –
それはそれを修正しました!私は '.ajax'呼び出しに以下を追加しなければならなかった: ' beforeSend:function(xhr){ xhr.overrideMimeType( 'text/plain; charset = UTF-16'); }、「 ありがとうございます! –