![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| AntonSaburov |
|
||||||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: 51 Всего: 118 |
Это, собственно, не вопрос, а описание решения, на поиск которого у меня ушел целый день. Так что если кто-нибудь когда-нибудь столкнется с аналогичной проблемой, он сможет найти этот пост через поиск.
Дорогой Человек-Из-Будущего! Я очень рад, что твой поиск привел тебя на эту страницу. Мне горько сознавать, что мир будушего не очень-то изменился со времени написания этих строк, и что бедные программеры, так же как и мы когда-то, по-прежнему каждый день сталкиваются с проблемой русификации бесчисленного множества всевозможных программ, пакетов и библиотек. Но это ничего - старайся во всем видеть позитив. Покуда процесс разработки и сопровождения программ не низвели до уровня тривиального занятия, доступного домашним хозяйкам и гламурным девицам (скажу тебе по секрету, что этого никогда не произойдет), ты всегда будешь сыт, обут, одет, и сможешь раз в год ездить купаться в Египет. А может, и целых два. Но вернемся на землю. Отпуск еще не скоро, а проблему надо решать сегодня. Итак, у нас есть процесс сборки, который выполняется Ant'ом. Все работает очень хорошо, да вот беда: русские буквы в выходных файлах сохраняются в виде знаков вопроса: "??????, ???". Ты, конечно, уже догадался, что это строчка из русифицированной версии программы HelloWorld ![]() Но я вообще-то немного о другом. Для того чтобы заставить компилятор сохранять class файлы в заданной кодировке, есть специальные ключи, и это все хорошо документировано. Я же хочу рассказать о том, как действовать в ситуации, когда документация не помогает - на одном простом примере. Итак, слушай, дружок. Все началось с того, что я случайно обнаружил, что Ant может работать с базами данных - например, выполнять всякие запросы. В том числе делать селект и сохранять данные в CSV фйле. Вы там у себя в будущем еще пользуетесь CSV форматом? Правильно, куда же без него. Так вот, я накорябал простенький build.xml, который коннектился к базе по JDBC и скачивал данные, архивные по природе, чтобы их можно было в любой момент поднять и поглядеть, чего в них есть интересного. Как ты уже догадался, дружок, кириллические символы в этом файле заменялись закорючками, и это меня активно не устраивало. В документации по SQL Task по этому поводу ничего обнадеживающего также не обнаружилось. Тогда я скачал сырцы Apache Ant. Как там индустрия открытых сырцов, жива еще? Ну и хорошо, я так и думал. Да, значить. Скачал и смотрю, что за открытие выходного файла отвечат примерно такой код:
Эге-ге - сказал я себе и почесал затылок, - да вам, братцы, видать, невдомек, что кроме английского бывают и другие языки. Сановцы - те знают, потому как у них там в девелопменте индус на китайце сидит и русским погоняет. Потому-то и предусмотрен у них специальный конструктор: public PrintWriter(OutputStream out, String encoding). Ну да ладно. Невдомек так невдомек. Какая у нас используется кодировка, если не указано явно? Та, которая по умолчанию. Какая именно - зависит от платформы, локали и реализации JVM. Можно ли ее переопределить? Да, можно. Для этого надо выставить системную пропертю file.encoding. Делается это заданием аргументов командной строки при запуске Java: -Dfile.encoding=Cp1251. Теперь надо выяснить, как это сделать в командной строке, которая вызывает Ant. Если ты думаешь, что для это служит опция -D, то как раз и ошибешься, точно так же как и я. Это они специально, чтобы нас с тобой с толку сбить. На самом деле опцией -D в командной строке Ant ты задаешь параметры, которые используются самим скриптом - для внутреннего, так сказать, пользования. Это для тех, кому в лом писать
А опции JVM на самом деле задаются переменной окружения ANT_OPTS. Поэтому ты в своем батнике (или shell файле, если ты линуксоид) напиши примерно такое:
И будет тебе щастье! |
||||||
|
|||||||
![]()
|
| Правила форума "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. |