2012-03-15 14 views
1

У меня возникла проблема с кодированными в кодировке UTF-16 XML и Firefox, которые я не могу решить.Проблема кодирования символов UTF-16 с FireFox

Я работаю с API доступа к веб-интерфейсу TFS11, чтобы создать настраиваемый элемент управления рабочим элементом. То, что должно быть, не имеет значения, но достаточно сказать, что я не имею права вмешиваться в какие-либо настройки веб-сервера или способ, которым приложение отправляет данные.

Общий рабочий процесс состоит в том, что элемент управления вытягивает файл вложения, анализирует его как 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 

Есть обходной путь для этого?

ответ

3

Отправлять правильную кодировку в ответ? Похоже, Firefox не смотрит на спецификацию в ваших данных, поэтому не понимает, что ваши данные UTF-16, а не UTF-8 ....

+0

Как я уже сказал, приложение, отправляющее данные, является TFS11. У меня нет абсолютно никакой возможности изменить способ предоставления данных. На данный момент я вполне уверен, что это либо ошибка в Firefox, либо ошибка в TFS11, но я не знаю, что. :) –

+1

У вас нет способа повлиять на заголовки, отправленные сервером здесь? На самом деле это ошибка в обоих: сервер должен указывать кодировку, и Firefox, вероятно, должен искать спецификацию. Вероятно, вы можете обойти проблему, вызывая overrideMimeType («text/plain; charset = UTF-16») на объекте XHR перед вызовом send(). Не знаете, как это сделать в используемой библиотеке. –

+2

Это исправило это! Мне пришлось добавить следующее к моему вызову '.ajax': ' beforeSend: function (xhr) { xhr.overrideMimeType ('text/plain; charset = UTF-16'); }, ' Спасибо! –

Смежные вопросы