Полезное для программистов:

Фриланс
Новости
Статьи
   
Рубрики:


Проблема с кодировкой в Ant

Поиск:
Это, собственно, не вопрос, а описание решения, на поиск которого у меня ушел целый день. Так что если кто-нибудь когда-нибудь столкнется с аналогичной проблемой, он сможет найти этот пост через поиск.

Дорогой Человек-Из-Будущего!

Я очень рад, что твой поиск привел тебя на эту страницу. Мне горько сознавать, что мир будушего не очень-то изменился со времени написания этих строк, и что бедные программеры, так же как и мы когда-то, по-прежнему каждый день сталкиваются с проблемой русификации бесчисленного множества всевозможных программ, пакетов и библиотек. Но это ничего - старайся во всем видеть позитив. Покуда процесс разработки и сопровождения программ не низвели до уровня тривиального занятия, доступного домашним хозяйкам и гламурным девицам (скажу тебе по секрету, что этого никогда не произойдет), ты всегда будешь сыт, обут, одет, и сможешь раз в год ездить купаться в Египет. А может, и целых два.

Но вернемся на землю. Отпуск еще не скоро, а проблему надо решать сегодня. Итак, у нас есть процесс сборки, который выполняется Ant'ом. Все работает очень хорошо, да вот беда: русские буквы в выходных файлах сохраняются в виде знаков вопроса: "??????, ???". Ты, конечно, уже догадался, что это строчка из русифицированной версии программы HelloWorld :)

Но я вообще-то немного о другом. Для того чтобы заставить компилятор сохранять class файлы в заданной кодировке, есть специальные ключи, и это все хорошо документировано. Я же хочу рассказать о том, как действовать в ситуации, когда документация не помогает - на одном простом примере. Итак, слушай, дружок.

Все началось с того, что я случайно обнаружил, что Ant может работать с базами данных - например, выполнять всякие запросы. В том числе делать селект и сохранять данные в CSV фйле. Вы там у себя в будущем еще пользуетесь CSV форматом? Правильно, куда же без него.

Так вот, я накорябал простенький build.xml, который коннектился к базе по JDBC и скачивал данные, архивные по природе, чтобы их можно было в любой момент поднять и поглядеть, чего в них есть интересного. Как ты уже догадался, дружок, кириллические символы в этом файле заменялись закорючками, и это меня активно не устраивало. В документации по SQL Task по этому поводу ничего обнадеживающего также не обнаружилось.

Тогда я скачал сырцы Apache Ant. Как там индустрия открытых сырцов, жива еще? Ну и хорошо, я так и думал. Да, значить. Скачал и смотрю, что за открытие выходного файла отвечат примерно такой код:

Код

PrintWriter writer = new PrintWriter(new FileOutputStream(filename));


Эге-ге - сказал я себе и почесал затылок, - да вам, братцы, видать, невдомек, что кроме английского бывают и другие языки. Сановцы - те знают, потому как у них там в девелопменте индус на китайце сидит и русским погоняет. Потому-то и предусмотрен у них специальный конструктор: public PrintWriter(OutputStream out, String encoding).

Ну да ладно. Невдомек так невдомек. Какая у нас используется кодировка, если не указано явно? Та, которая по умолчанию. Какая именно - зависит от платформы, локали и реализации JVM. Можно ли ее переопределить? Да, можно. Для этого надо выставить системную пропертю file.encoding. Делается это заданием аргументов командной строки при запуске Java: -Dfile.encoding=Cp1251.

Теперь надо выяснить, как это сделать в командной строке, которая вызывает Ant. Если ты думаешь, что для это служит опция -D, то как раз и ошибешься, точно так же как и я. Это они специально, чтобы нас с тобой с толку сбить. На самом деле опцией -D в командной строке Ant ты задаешь параметры, которые используются самим скриптом - для внутреннего, так сказать, пользования. Это для тех, кому в лом писать

Код

<property name="some.name" value="some value">


А опции JVM на самом деле задаются переменной окружения ANT_OPTS. Поэтому ты в своем батнике (или shell файле, если ты линуксоид) напиши примерно такое:

Код

set ANT_OPTS=-Dfile.encoding=Cp1251
ant


И будет тебе щастье!
Автор: Stampede
Сайт: http://real-english.ru






Просмотров: 2674

 

 

Новые статьи:


Популярные:
  1. Как сделать цикличным проигрывание MIDI-файла?
  2. Создание AVI файла из рисунков
  3. Как устройство "отключить в данной конфигурации"?
  4. Kто в данный момент присоединен через Сеть?
  5. Как узнать количество доступной памяти?
  6. Как реализовать в RichEdit разноцветный текст?
  7. Как скрыть свое приложение от ProcessViewer
  8. Как программно нажать/скрыть/показ кнопку "Start"?
  9. Модуль работы с ресурсами в PE файлах
10. Функции вызова диалоговых окон выбора
11. Проверка граматики средствами Word'а из Delphi.
12. Модуль для упрощенного вызова сообщений
13. Функции для записи и чтение своих данных в, ЕХЕ- файле
14. Рекурсивный просмотр директорий
15. Network Traffic Monitor
16. Разные модули
17. Универсальная функция для обращения к любым экспортируем функциям DLL
18. Библиотека от VladS
19. Протектор для UPX'а
20. Еще об ICQ, сообщения по контакт листу?
21. Использование открытых интерфейсов
22. Теория и практика использования RTTI
23. Работа с TApplication
24. Примеры использования Drag and Drop для различных визуальных компонентов
25. Что такое порт? Правила для работы с портами
26. Симфония на клавиатуре
27. Загрузка DLL
28. Исправление автоинкремента
29. Взаимодействие с чужими окнами
30. Проверить дубляжи в столбце


 

 

 
 
На главную