Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / чтение письма и кодировка. / 10 сообщений из 10, страница 1 из 1
20.03.2006, 21:16
    #33613105
semenar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
чтение письма и кодировка.
Подскажите плиз. Есть JAVA процедура по чтению почтового ящика. Взято из пакета javamail. Как получить тело письма или заголовок в кодировке 1251?

Там кусочек выглядит так:
SYSTEM.OUT.println((String)p.getContent());
TBodyMail = (String)p.getContent();

Как получить переменную TBodyMail в нужной кодировке? К примеру в 1251? Сам сервер Linux и там все в koi8-r ессно. На форуме посмотрел по отправке, но что-то не могу пока сам разобратся.
...
Рейтинг: 0 / 0
21.03.2006, 10:00
    #33613538
чтение письма и кодировка.
При чтении ящика, тебе не нужно заботиться о кодировке. За тебя это делает javamail. Библиотека сама поймет, в какой кодировке создано письмо и верно ее интерпретирует. Указывать кодировку при работе с javamail понадобится только при отправке почты.

На вопрос, как получить
Код: plaintext
(String)p.getContent();
в какой-то кодировке, хочется ответить, что строки в Java хранятся в Unicode. И вообще, какого типа в вашем куске кода переменная p? А SYSTEM.OUT - это что за объект?
...
Рейтинг: 0 / 0
21.03.2006, 10:04
    #33613549
М.Голованов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
чтение письма и кодировка.
Он сам пишет: "Сам сервер Linux и там все в koi8-r ессно". Если у него в JVM кодировка по умолчанию - KOI8R, то понятно, что в логе он видит мусор.
...
Рейтинг: 0 / 0
21.03.2006, 10:16
    #33613593
чтение письма и кодировка.
М.ГоловановОн сам пишет: "Сам сервер Linux и там все в koi8-r ессно". Если у него в JVM кодировка по умолчанию - KOI8R, то понятно, что в логе он видит мусор .
Признаться, удевлен Вашему ясновидению!:) Меня хватило лишь на то, чтобы сделать предположения о типе перемнной p.
...
Рейтинг: 0 / 0
21.03.2006, 10:22
    #33613609
semenar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
чтение письма и кодировка.
Ненавижу регистрациюПри чтении ящика, тебе не нужно заботиться о кодировке. За тебя это делает javamail. Библиотека сама поймет, в какой кодировке создано письмо и верно ее интерпретирует. Указывать кодировку при работе с javamail понадобится только при отправке почты.

На вопрос, как получить
Код: plaintext
(String)p.getContent();
в какой-то кодировке, хочется ответить, что строки в Java хранятся в Unicode. И вообще, какого типа в вашем куске кода переменная p? А SYSTEM.OUT - это что за объект?
Ну суть идеи в том чтобы проверить почтовый ящик, и в оракловскую табличку вставить данные: от кого, тема, тело. А SYSTEM.OUT это я так понимаю вывод на экран,если с SQL Plus запускать. А насчет того что сам поймет.. Так всякую ерунду вставляет. на "тест" пишет "OAOO".
...
Рейтинг: 0 / 0
21.03.2006, 10:32
    #33613635
semenar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
чтение письма и кодировка.
Может кусок кода поболее привести, чтобы понятнее стало? Просто я JAVA я не очень, прошу сильно ногами не пинать.
...
Рейтинг: 0 / 0
21.03.2006, 10:39
    #33613660
чтение письма и кодировка.
semenarМожет кусок кода поболее привести, чтобы понятнее стало? Просто я JAVA я не очень, прошу сильно ногами не пинать.
Да, хотелось бы услышать нормально заданный вопрос. С рабочим куском кода, результатами эксперимента и ожидаемыми результатами. Короче, чтобы гадать, что у вас там, не нужно было.
...
Рейтинг: 0 / 0
21.03.2006, 12:02
    #33613984
Nefastus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
чтение письма и кодировка.
Если я вашу проблему правильно понял, ниже примерно то что вам надо, естественно, нужно буфер добавить и т.д.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
        String charset = extractCharset(p.getContentType()); 
        
        ByteArrayOutputStream baos =  new  ByteArrayOutputStream();
        InputStream in = p.getInputStream();
        
         int  b;
         while  ((b = in.read()) != - 1 ) baos.write(b);                  
        in.close();                 
        String TBodyMail  =  new  String(baos.toByteArray(), charset);

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
     public   static  String extractCharset(String type) {
         if  (type ==  null )  return   null ;
        
         int  semi = type.indexOf(";");
         if  (semi == - 1 )  return   null ;
        
         int  charsetLocation = type.indexOf("charset=", semi);
         if  (charsetLocation == - 1 )  return   null ;
        
        String afterCharset = type.substring(charsetLocation +  8 );        
        afterCharset = afterCharset.replace('"', ' ');
        
         return  afterCharset.trim();
    }
...
Рейтинг: 0 / 0
21.03.2006, 12:22
    #33614061
semenar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
чтение письма и кодировка.
NefastusЕсли я вашу проблему правильно понял, ниже примерно то что вам надо, естественно, нужно буфер добавить и т.д.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
        String charset = extractCharset(p.getContentType()); 
        
        ByteArrayOutputStream baos =  new  ByteArrayOutputStream();
        InputStream in = p.getInputStream();
        
         int  b;
         while  ((b = in.read()) != - 1 ) baos.write(b);                  
        in.close();                 
        String TBodyMail  =  new  String(baos.toByteArray(), charset);

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
     public   static  String extractCharset(String type) {
         if  (type ==  null )  return   null ;
        
         int  semi = type.indexOf(";");
         if  (semi == - 1 )  return   null ;
        
         int  charsetLocation = type.indexOf("charset=", semi);
         if  (charsetLocation == - 1 )  return   null ;
        
        String afterCharset = type.substring(charsetLocation +  8 );        
        afterCharset = afterCharset.replace('"', ' ');
        
         return  afterCharset.trim();
    }


Сенкс, сейчас посмотрю, только я заметил, что все от заголовка письма зависит.. Если в заголовке стоит:
Content-Type: text/plain;
format=flowed;
charset="koi8-r";
reply-type=original
Content-Transfer-Encoding: 8bit
то все проходит на "УРА". А вот если Content-Type не указан, то и начинаются проблемы. Это в чястности бывает когда в Outlook выставлено Формат отправляемых - сообщений - обычный текст - UUNcode.
...
Рейтинг: 0 / 0
26.03.2006, 13:46
    #33625693
semenar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
чтение письма и кодировка.
Все! Поборол, если кому итересен исходный код, пишете письма в почту, поделюсь с удовольствием. Всем спасибо)))
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / чтение письма и кодировка. / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]