Наверное, сильно туплю и всем надоело, но всё-таки...
Чего-то не клеится у меня такая задача:
Есть консольное приложение, которое выводит строки на
консоль и одновременно пишет их в файл. Причём в файл
в кодировке Win1251. Ну а консоль — в винде. Перепробовал
несколько вариантов, но что-то ничего толком не получается.
Здравствуйте, azzx, Вы писали:
A>Наверное, сильно туплю и всем надоело, но всё-таки...
A>Чего-то не клеится у меня такая задача:
A>Есть консольное приложение, которое выводит строки на
A>консоль и одновременно пишет их в файл. Причём в файл
A>в кодировке Win1251. Ну а консоль — в винде. Перепробовал
A>несколько вариантов, но что-то ничего толком не получается.
http://rsdn.ru/search/?q=1251+866&mode=rank&group=N&group=10
А ты бы что-нибудть толком объяснил может и помогли бы. А так под гадай что и как ты пытаешься сделать и отчего у тебя не получается.
Здравствуйте, Blazkowicz, Вы писали:
B>http://rsdn.ru/search/?q=1251+866&mode=rank&group=N&group=10
Ну да — лучшая рекомендация: Пишите по-аглицки
B>А ты бы что-нибудть толком объяснил может и помогли бы. А так под гадай что и как ты пытаешься сделать и отчего у тебя не получается.
Видимо, надо было подробнее... Ладно, имеем небольшой пример:
import java.io.*;
public class Test {
public static void main(String args[]) throws IOException {
System.out.println("Некоторая тестовая строка");
PrintWriter pr = new PrintWriter(new File("test.log"));
pr.write("Некоторая тестовая строка");
pr.flush();
}
}
Компилируем: java -encoding Cp1251 Test.java — т.е. всё путём.
Запускаем: java Test
Результат: В файле — Win-1251, на консоли — кракозябры
Юзаем стандартный способ...
Запускаем: java -Dfile.encoding=cp866 Test
Результат: В файле — DOS866, на консоли — всё понятно.
Так вот вопрос — как поиметь на консоли понятное и в файле — Win1251?
Разные варианты с ручной перекодировкой строк, уже и не помню даже какие
точно (ибо несоклько их было), пробовал, а толку не получил.
Здравствуйте, azzx, Вы писали:
A>import java.io.*;
A>public class Test {
A> public static void main(String args[]) throws IOException {
A> System.out.println("Некоторая тестовая строка");
A> PrintWriter pr = new PrintWriter(new File("test.log"));
A> pr.write("Некоторая тестовая строка");
A> pr.flush();
A> }
A>}
Используй тег [java] для раскраски кода. Не пиши строковые константы в коде.
A>Компилируем: java -encoding Cp1251 Test.java — т.е. всё путём.
javac
A>Запускаем: java Test
A>Результат: В файле — Win-1251, на консоли — кракозябры
A>Юзаем стандартный способ...
A>Запускаем: java -Dfile.encoding=cp866 Test
A>Результат: В файле — DOS866, на консоли — всё понятно.
Вроде все понимаешь.
A>Так вот вопрос — как поиметь на консоли понятное и в файле — Win1251?
A>Разные варианты с ручной перекодировкой строк, уже и не помню даже какие
A>точно (ибо несоклько их было), пробовал, а толку не получил.
Вот примеры:
http://rsdn.ru/Forum/Message.aspx?mid=1952081&only=1Автор: Blazkowicz
Дата: 13.06.06
Но для комерческого продукта такой подход не допустим. Строки все лучше вынести в отдельный файл.
Смотри так же OutputStreamWriter в котором можно указывать кодировку.
Здравствуйте, Blazkowicz, Вы писали:
B>Используй тег [java] для раскраски кода.
Спасибо, учту.
B> Не пиши строковые константы в коде.
Дык це ж тест...

Имхо — тут всё строго наоборот — тестовые константы,
над которыми собственно изгаляемся, лучше писать в коде.
B>Но для комерческого продукта такой подход не допустим. Строки все лучше вынести в отдельный файл.
B>Смотри так же OutputStreamWriter в котором можно указывать кодировку.
Спасибо за наводку. Вот так все получилось нормально:
import java.io.*;
public class Test {
public static void main(String args[]) throws IOException {
OutputStreamWriter out =
new OutputStreamWriter(System.out, "Cp866");
out.write("Некоторая тестовая строка шШ");
out.flush();
PrintWriter pr = new PrintWriter(new File("test.log"));
pr.write("Некоторая тестовая строка");
pr.flush();
}
}
И на консоли нормальные буквы и в файле — то что надо.