Я пишу парсер для писем Thunderbird.
Введите:
У меня есть файл с загрузкой электронных писем (основная часть написана на ANSI - WINDOWS 1250, но содержимое находится в utf-8 или iso-8859-2, оно написано в разметке Content-Type почты).
Выход:
Коллекция сообщений содержимого (тела).
Вот что я делаю:
- Считать весь файл в переменную byte []. (все еще ANSI)
- Преобразовать его в строку. (utf-16, но в байтах, как в ANSI) - мне нужно преобразовать в строку сейчас, потому что мне нужно перейти к следующей точке (разделить кучу сообщений -> единственное сообщение)
- Разделите группу сообщений на отдельные сообщения и добавьте каждое сообщение в коллекцию (utf-16).
- Проверить Content-Type сообщения.
- Используя JavaMail API, я использую
mail.getContent
(думаю, utf-16, но я не уверен в кодировке внутри).
- Это моя проблема: у меня есть строка в UTF-16, я думаю, и ее содержимое, например, iso-8859-2, что мне теперь делать?
Я использовал Charset и новую String (byte [], String (имя charset)), но ни одна из моих попыток не прошла.
Моя попытка:
- Конвертировать финальную строку из UTF-16 -> UTF-8 (потому что это то же количество байтов, что и в 8859-2)
- Получите байты из utf-8 и закодируйте его как ANSI
- Декодировать ANSI в utf-8
- Кодировать utf-8 в ISO-8859-2 (или оставить его, если он уже был utf-8)
- Декодирование из ISO-8859-2.
Но это не дает мне хороших результатов.
как я могу с этим справиться? Слишком много расшифровок для меня, и я чувствую головокружение.
Ввод (это был файл cp1250, но я преобразовал его в utf-8,):
From - Thu Dec 08 15:06:14 2011
(some mail header stuff....)
Content-Type: text/html; charset="iso-8859-2"
<table border="0" cellspacing="0" width="600"><tbody><tr><th class="ffield2"><span class="cald-word">clichéd</span> </th><td class="field1"><br>
banal; <b>banalny<b>
<br>
She made a <span class="cald-word">clichéd remark about the importance of friendship.</span>
<br>
<b>Wygԯsiԡ jakѶ banalnѠuwagꡯ wadze przyjaݮi . <br>
<b>
<b> <b><br>
</td></tr></tbody></table>
From - Thu Dec 08 15:42:09 2011
Content-Type: text/html; charset=utf-8
(some mail header stuff....)
<table border="0" cellspacing="0" width="600"><tbody><tr><th class="ffield2">nosiness</th><td class="field1"><br>
<br>
interest in somebody else's business; <b>wścibstwo<b>
<br>
Nosiness is something I can't stand, so stop asking such questions.
<br>
<b>Nie znoszę wścibstwa, więc przestań zadawać takie pytania. <b><b> <br>
<b>
</td></tr></tbody></table>