Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Encoding


Автор: vikaz 30.9.2010, 07:47
Ребята, всем привет! Возникла проблема!
Принимаю почтовые сообщения и subject закодирован в UTF-8. 

Код

=?utf-8?B?MzY5MzhiOTItYjA5Yi00ODdiLThhODgtMmVhMzIxNjRjMThi?=


Но вот проблема, никак не могу преобразовать его в простую строку.
Пытаюсь сделать так:
Код

string unicodeString = "=?utf-8?B?MzY5MzhiOTItYjA5Yi00ODdiLThhODgtMmVhMzIxNjRjMThi?=";
Encoding qq = Encoding.UTF8;
byte[] qwe1 = qq.GetBytes(unicodeString);

string qwe2 = qq.GetString(qwe1);
MessageBox.Show(qwe2);

Но ничего не получается, преобразование не происходит. Подскажите, в чем может быть загвоздка?
Заранее спасибо.

Автор: jonie 30.9.2010, 08:36
отрезаете это "=?utf-8?B?" до окончания "?=" и делаете base64 decode (Convert.FromBase64String) ну а дальше уже работаете с UTF-8

Автор: vikaz 30.9.2010, 08:42
Спасибо, буду пробовать

Автор: mrbrooks 30.9.2010, 08:49
хотя jonie все и так объяснил, влезу:
Код

byte [] arr = Convert.FromBase64String("MzY5MzhiOTItYjA5Yi00ODdiLThhODgtMmVhMzIxNjRjMThi");
string output = Encoding.UTF8.GetString(arr);


Автор: vikaz 30.9.2010, 08:53
Спасибо! Но не понятно, что компонента не отбрасывает автоматом =?utf-8?B?.....?=
Глупо и непонятно..... а делать это руками совсем не смешно! :(

Автор: mrbrooks 30.9.2010, 08:55
А что за компонента?

Да и не стоит забывать что человечество придумало регулярные выражения.

Автор: vikaz 30.9.2010, 09:07
Спасибо! Всем каждому по плюсу в бортовой журнал.
Проблему правда решил по другому. 
При отправке писем при помощи SmtpClient, формировал следующим образом:
Код

message.SubjectEncoding = Encoding.UTF8;
message.Subject = subject; 

убрал message.SubjectEncoding = Encoding.UTF8; и все пучком. Еще раз спасибо.

Автор: jonie 30.9.2010, 10:36
Цитата(mrbrooks @  30.9.2010,  09:55 Найти цитируемый пост)

Да и не стоит забывать что человечество придумало регулярные выражения. 

микроскопом по гвоздям бить нехорошо, достаточно сравнивать на utf8 собственно и на метод кодирования (B в данном случае это base64, но есть и другие методики - читайте RFC)

Автор: vikaz 30.9.2010, 11:48
jonie, а есть возможность показать это кодом?

Автор: jonie 30.9.2010, 12:06
vikaz, распечатать тебе кодом RFC или что?
Читайте отсюда: http://en.wikipedia.org/wiki/MIME#Encoded-Word

Автор: mrbrooks 1.10.2010, 08:04
Цитата(jonie @  30.9.2010,  11:36 Найти цитируемый пост)
микроскопом по гвоздям бить нехорошо, достаточно сравнивать на utf8 собственно и на метод кодирования

а ведь верно! 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)