|
Модераторы: LSD, AntonSaburov |
|
korob2001 |
|
||||||
Эксперт Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 1 Всего: 61 |
Привет, всем!
Если вопрос не совсем корректно задан, извините - у меня уже голова квадратная. Опишу чуть подробнее суть проблемы. Как-то мне довелось писать одну программу, она замечательно работала, пока не стал вопрос о том, что бы удовлетворить русско-язычную публику. Программа занимается автоматической рассылкой почты для клиентов одной фирмы (письма активации учётных записей, подтверждения о покупке, информация о доставке и т.п.). Программа должна была отправлять письма в различных форматах, на разных языках. Я понимал, что со временем в неё нужно будет добавлять новые сообщения, потому решил писать её в стиле pluggable. В итоге получилось 2 jar архива (mail-plugin-api.jar - интерфейсы которые плагины должны реализовывать, MailService.jar - основная программа, интерфейс пользователя, загрузка плагинов и т.д.), так еже есть папка plugins куда помещаются сами плагины (тоже jar архивы). Так как формат писем у каждого плагина разный (под форматом я подразумеваю дизайн - оформление), каждый плагин содержит свои HTML шаблоны, примерно такого вида en_template.html, для каждого языка свой:
Такие HTML файлы находятся внутри jar архива каждого плагина, когда программа с помощью плагина получает содержимое этого файла происходит подстановка спец. слов (таких как @UserName). Этот HTML файл в кодировке UTF-8. Вот так программа формирует и отправляет Email:
Отсюда видно, что кодировку устанавливаю первым делом, сразу же после создания объекта HtmlEmail, но если шаблон на русском языке, то приходит примерно такое:
Если пишу например Subject прямо в коде, на русском языке, тогда он отображается как положено, но если читаю из файла, вложенного в jar плагина - результат можно видеть выше. ;((((( Понимаю, что проблема с кодировкой. Если нужно привести ещё какую-то часть кода, то скажите какую именно, я приведу. Заранее спасибо за помощь. -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
||||||
|
|||||||
sgrey |
|
|||
Опытный Профиль Группа: Участник Сообщений: 265 Регистрация: 15.4.2006 Репутация: нет Всего: 4 |
проблема скорее всего здесь в том, что файл сохранён не в юникоде, а в другой кодировке. Попробуй файл сохранить в UTF-8
|
|||
|
||||
Pawl |
|
||||
Опытный Профиль Группа: Участник Сообщений: 649 Регистрация: 22.4.2008 Где: Витебск Репутация: 7 Всего: 28 |
Может, перед отправкой принудительно кодировать сообщение из файла в UTF-8? К примеру, так:
Этот ответ добавлен с нового Винграда - http://vingrad.com |
||||
|
|||||
Pawl |
|
|||
Опытный Профиль Группа: Участник Сообщений: 649 Регистрация: 22.4.2008 Где: Витебск Репутация: 7 Всего: 28 |
Пардон, вместо fileName имелось ввиду, конечно, текстовое содержимое файла. Вообще, аргументы д. б. типа String, так что
Этот ответ добавлен с нового Винграда - http://vingrad.com |
|||
|
||||
serger |
|
|||
Опытный Профиль Группа: Участник Сообщений: 518 Регистрация: 19.6.2007 Где: Ижевск Репутация: 1 Всего: 5 |
Скорее всего двойное преобразование кодировок.
Почитайте: http://skipy.ru/technics/encodings.html Этот ответ добавлен с нового Винграда - http://vingrad.com |
|||
|
||||
korob2001 |
|
|||
Эксперт Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 1 Всего: 61 |
Спасибо, сейчас почитаю и завтра на работе буду пробовать. На работе, межу делом, загрузили другой работой, даже сюда зайти времени не было.
Добавлено через 5 минут и 56 секунд Да, кстати, я забыл сразу написать. Писал я эту программу на своём ноутбуке, когда на нём её запускал, всё работало правильно. Я так понимаю из-за того, что локаль на нём русская была ru_RU, а когда перенёс приложение на сервер, где локаль нидерландская nl_BE. После чего пробовал явно указывать локаль, в зависимости от того, на каком языке шаблон, но всё равно не помогло. -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
|||
|
||||
korob2001 |
|
||||||||
Эксперт Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 1 Всего: 61 |
Доброе утро!
Почитал статью. Перевёл кодировку properties файлов назад в iso-8859- , откуда так же берутся Тема письма и другая дополнительная информация, они так же находятся в jar плагина. Вот, примерно в таком виде:
Subject здесь на русском языке и то, что в properties файлах нужно использовать только кодировку iso-8859-1, а остальные символы нужно прописывать кодами \uXXXX, меня немного смутило. Дело в том, что я переводил кодировку этих файлов тоже в UTF-8 и в принципе программа читала эти файлы, пусть и не совсем правильно. Символы русского алфавита я всегда писал в properties файлы, без всяких кодов. В общем, полез я в проект с блокнотом и выяснилось, что это NetBeans переводил коды \uXXXX в символы и обратно симовлы в коды \uXXXX. Потому раньше для меня это всё происходило прозрачно, в смысле никаких кодов я никогда туда не писал. Насколько я понимаю проблема в коде, который читает HTML шаблон из файла, т.е. где-то здесь.
Попробовал изменить сделать так:
Т.е указал кодировку. Теперь получаю письмо в таком виде:
Причём первая строка это Subject из properties файла, она так же присутствует и в теле письма. Вот она теперь отображается правильно, зато всё остальное, нет. ;(((( Это сообщение отредактировал(а) korob2001 - 9.10.2014, 12:40 -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
||||||||
|
|||||||||
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |