Большой Воронежский Форум
» Программирование>Вопросик по Java
+Greshnik+ 22:12 17.04.2009
Вобщем есть такая ситуация: получаю с сервера строку содержащую кирилицу в кодировке KOI-8R собственно при выводе строки на экран получаю
=?KOI8-R?... и тд.
Как преобразовать строку в cp1251? [Ответ]
dn2k4 00:35 18.04.2009
http://java.sun.com/j2se/1.4.2/docs/...a.lang.String)
? [Ответ]
+Greshnik+ 08:59 18.04.2009
Ещё раз опишу проблему:
стягиваю с mail.ru письмо, вывожу поле "От кого:"

String from = InternetAddress.toString ( msg [ 6 ] .getFrom()) ;
System.out.println(from);

Получаю: =?KOI8-R?B?6NLZy8nOIOnHz9LY?= <[email protected]>
Вместо: Вася Пупкин <[email protected]>

dn2k4, не получилось, может просто я чёт не так понял.
Делал так: String str = new String(from.getBytes("cp1251")); и
String str = new String(from.getBytes(),"cp1251"); [Ответ]
dn2k4 19:17 18.04.2009
+Greshnik+, не, эт я тебе чуть не то посоветовал =]
Для почтовых сообщений действует какой-то из RFC, согласно которому кодировка указывается прямо в строке адреса следующим образом (детали опущу):

1) "=?KOI8-R?B?" - кодировка koi8-r, закодировано base64 (если вместо "B" стоит "Q", то это не base64, а quotedprintable, ну кодировка ессно тоже другая может быть)
2) "6NLZy8nOIOnHz9LY" - это и есть закодированная строка
3) "?=" - конец закодированного, дальше чистый ASCII 7 бит

Итого надо что-то в духе:

// откусываешь часть строки
String from = "6NLZy8nOIOnHz9LY";

sun.misc.BASE64Decoder bs64dec = new sun.misc.BASE64Decoder();
String s = new String( bs64dec.decodeBuffer(from) );
String addr = new String( s.getBytes(), "KOI8-R");

System.out.println(addr);

И вместо ожидаемого "Васи Пупкина" на выходе получим "Хрыкин Игорь" =)

А лучше, конечно, какой-нить нормальный класс для работой с почтой найди... [Ответ]
+Greshnik+ 11:05 19.04.2009
dn2k4, ты просто человечище
Спасибо огромное, всё работает [Ответ]
Вверх