Начиная с JDK 1.6, в свойствах есть метод load () , который принимает Reader. Это означает, что вы можете сохранить все файлы свойств как UTF-8 и читать их все напрямую, передавая InputStreamReader в load (). Я думаю, что это самое элегантное решение, но оно требует, чтобы ваше приложение работало в среде исполнения Java 6.
Исторически load () принимала только InputStream, и поток был декодирован как ISO-8859-1. Не кодировка системы по умолчанию, всегда ISO-8859-1. Это важно, потому что это делает возможным определенный взлом. Скажем, ваш файл свойств хранится как UTF-8. После извлечения свойства вы можете перекодировать его как ISO-8859-1 и снова декодировать как UTF-8, например так:
String realProp = new String(prop.getBytes("ISO-8859-1"), "UTF-8");
Это уродливо и хрупко, но это работает. Но я думаю, что лучшее решение, по крайней мере, на ближайшие несколько лет, это то, которое вы нашли: массовое преобразование файлов с помощью native2ascii с помощью инструмента сборки, такого как Ant.