DoS866 <->Win1251
От: azzx Россия  
Дата: 04.07.06 10:26
Оценка:
Наверное, сильно туплю и всем надоело, но всё-таки...
Чего-то не клеится у меня такая задача:
Есть консольное приложение, которое выводит строки на
консоль и одновременно пишет их в файл. Причём в файл
в кодировке Win1251. Ну а консоль — в винде. Перепробовал
несколько вариантов, но что-то ничего толком не получается.
Re: DoS866 <->Win1251
От: Blazkowicz Россия  
Дата: 04.07.06 10:32
Оценка:
Здравствуйте, azzx, Вы писали:

A>Наверное, сильно туплю и всем надоело, но всё-таки...

A>Чего-то не клеится у меня такая задача:
A>Есть консольное приложение, которое выводит строки на
A>консоль и одновременно пишет их в файл. Причём в файл
A>в кодировке Win1251. Ну а консоль — в винде. Перепробовал
A>несколько вариантов, но что-то ничего толком не получается.

http://rsdn.ru/search/?q=1251+866&amp;mode=rank&amp;group=N&amp;group=10

А ты бы что-нибудть толком объяснил может и помогли бы. А так под гадай что и как ты пытаешься сделать и отчего у тебя не получается.
Re[2]: DoS866 <->Win1251
От: azzx Россия  
Дата: 04.07.06 10:57
Оценка:
Здравствуйте, Blazkowicz, Вы писали:

B>http://rsdn.ru/search/?q=1251+866&amp;mode=rank&amp;group=N&amp;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?
Разные варианты с ручной перекодировкой строк, уже и не помню даже какие
точно (ибо несоклько их было), пробовал, а толку не получил.
Re[3]: DoS866 <->Win1251
От: Blazkowicz Россия  
Дата: 04.07.06 11:10
Оценка:
Здравствуйте, 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&amp;only=1
Автор: Blazkowicz
Дата: 13.06.06


Но для комерческого продукта такой подход не допустим. Строки все лучше вынести в отдельный файл.
Смотри так же OutputStreamWriter в котором можно указывать кодировку.
Re[4]: DoS866 <->Win1251
От: azzx Россия  
Дата: 04.07.06 12:15
Оценка:
Здравствуйте, 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();
  }
}


И на консоли нормальные буквы и в файле — то что надо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.