Charset.defaultCharset()
). А знать ее часто бывает полезно. Например, запускаемые внешние процессы могут возвращать описания ошибок на русском -- и фиг вы их прочитаете. Конечно, можно просто зашить кодировку Cp866 для русской версии -- но это неправославное решение. А ну как другая локаль будет? Хотелось бы иметь возможность спросить, в какой кодировке работает наша консоль.Я долгое время был уверен, что такого метода в jdk не предусмотрено. Но, совершенно случайно, раскапывая исходники стандартной библиотеки обнаружил решение для Sun JDK 1.6+ -- приватный статический метод
java.io.Console.encoding()
final Class<Console> clazz = Console.class; final Method method = clazz.getDeclaredMethod( "encoding", new Class[0] ); method.setAccessible( true ); final String encoding = ( String )method.invoke( null );
возвращает на моей системе Cp866, как положено.
Вот спасибо за решение! Не будете против, если утащу к себе, с ссылкой на оригинал?
ОтветитьУдалитьНет, не против, конечно. Мне-то самому это решение в итоге так и не пригодилось :) Пусть хоть кому-то пользу принесет
ОтветитьУдалитьВ свое время поимел я проблем с похожим багов. Тогда, кстати, пришлось выучить юникод раз и навсегда.
ОтветитьУдалитьИ самое весёлое было то, что Java была 1.5, потому про класс Console пришлось забыть. Пришлось расчехлить JNI и дёргать имя кодировки черезе WinAPI. Опять же, более чистый способ - без взлома private метода.