Как вы получили ASP.NET для вывода текста в кодировке UTF-16? - PullRequest
2 голосов
/ 03 февраля 2009

Как вы получили ASP.NET для вывода текста в кодировке UTF-16?

Я сериализую объект в .NET, который по умолчанию имеет формат UTF-16. Теперь я хочу отправить строку в качестве выходного ответа на запрос .ashx.

Я получаю ошибку: Переключение с текущей кодировки на указанную кодировку не поддерживается. Ошибка обработки ресурса

Как мне указать моему веб-сайту или странице использовать формат UTF-16.

Спасибо.

Обновление: читать оба ответа.

Ответы [ 3 ]

3 голосов
/ 03 февраля 2009

В целом: нет.

Веб-страницы в виде UTF-16 путают многие инструменты и заставляют браузеры вести себя странным, неожиданным образом. (Esp .: связанные скрипты, отправка форм, прокси). UTF-16 можно безопасно обслуживать только как двоичный объект, поэтому для веб-контента следует придерживаться кодировки, которая является расширенным набором ASCII - очевидный выбор - UTF-8.

Ошибка, которую вы цитируете, обычно возникает при попытке прочитать XML-файл, чей пролог <? Xml encoding = "..."?> Конфликтует с реальной кодировкой файла. Ни одна из кодировок superset-of-ASCII никогда не конфликтует, потому что 'xml encoding' является ASCII и представлена ​​одинаково во всех них, но если вы добавили encoding = "utf-16" в файл XML, который не сохранен как UTF 16, или вы не вставили его, когда равно , тогда синтаксический анализатор не может справиться с логической невозможностью.

2 голосов
/ 03 февраля 2009

Измените свойство Response.ContentEncoding на System.Text.Encoding.Unicode?

1 голос
/ 08 февраля 2012

У меня сработало следующее:

Dim utf16 = New UnicodeEncoding(False, True)
Response.BinaryWrite(utf16.GetPreamble)
Response.ContentEncoding = utf16

Кстати, мне нужно было это сделать, потому что я отправлял HTML-таблицу, содержащую символы Юникода, в Excel. (Я знаю, не лучший способ создать файл Excel!)

Excel (и LibreOffice Calc) ожидает utf-16 и не работает с utf-8. Excel также нуждается в спецификации UTF16 в начале, следовательно, вызов GetPreamble.

...