Отладка строк ASP.NET, загруженных в браузер (Монреаль вместо Монреаля) - PullRequest
0 голосов
/ 28 марта 2010

Я загружаю vCard в браузер, используя Response.Write для вывода строк .NET со специальными символами с акцентом. Тип MIME текст / X-Vcard и Французские символы отображаются неправильно в Outlook, например, Montréal;Québec .NET строка отображается как Montréal Québec в браузере.

Видимо, формат по умолчанию vCard - ASCII. Строки .NET являются Unicode UTF-16.

Я использую этот код генератора vCard от CodeProject.com

Я играл с образцом кода System.Encoding внизу этой связанной страницы MSDN , чтобы преобразовать строку Юникода в байты и затем записать байты ascii, но затем я получил Montr?al Qu?bec (прогресс но не победа). Также я попытался установить тип содержимого для ответа us-ascii и utf-8.

Если я открою загруженную визитную карточку в Блокноте Windows и сохраню ее в виде текста ANSI (вместо формата по умолчанию Юникод) и открою в Outlook, все в порядке. Поэтому я предполагаю, что мне нужно вызвать загрузку кодировки ANSI, но я не уверен, что делаю это неправильно или неправильно понимаю, с чего начать.

Обновление: Глядя на необработанный HTTP, кажется, что мои французские символы загружаются в неожиданном формате, поэтому мне кажется, что мне нужно поработать на стороне сервера ... raw http://img444.imageshack.us/img444/8533/charsd.png (полный размер)

Ответы [ 2 ]

1 голос
/ 29 марта 2010

é - это то, как выглядит é, когда он закодирован как UTF-8 и ошибочно декодирован как ISO-8859-1 или windows-1252 (или «ANSI», как его называют приложения Microsoft) Когда вы открываете файл в Блокноте, он автоматически определяет кодировку как UTF-8. Затем вы изменяете кодировку, сохраняя ее как «ANSI», которая работает, потому что é также поддерживается этой кодировкой.

Когда вы просматриваете страницу в Outlook, что означает кодировка? Мне кажется, что этот дамп HTTP выглядит как правильно сформированный UTF-8, но Outlook, похоже, читает его как ISO-8859-1 или windows-1252. Я не использую Outlook, и я не знаю его причуд; ты уверен, что правильно понял заголовки?

0 голосов
/ 02 апреля 2010

Вам не нужно ничего конвертировать! Просто укажите в заголовках ответа HTTP в текстовом / x-vcard документе, что ответ закодирован в формате UTF-8 (Response.CharSet или Response.ContentEncoding или аналогичный - не уверен, в какой конкретной ситуации вы находитесь).

Кроме того, вы можете попробовать выдать метку порядка байтов UTF-8 , чтобы помочь клиенту определить кодировку.

...