Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Кодировка и cmd


Автор: Alexandr87 3.12.2005, 16:39
Код

import java.nio.charset.Charset;
import java.io.*;

public class Cover {
  public Cover() {
  }

  public static void main(String args[]) throws Exception {
    Process p=Runtime.getRuntime().exec("cmd");
    InputStream out=p.getInputStream();
    OutputStream in=p.getOutputStream();

    Object[] c= Charset.availableCharsets().values().toArray();
    for (int x=0; x<c.length; x++) {
      in.write("copy".getBytes());
      in.write(10);
      in.write(13);
      in.flush();
      Thread.sleep(100);
      byte temp[]=new byte[out.available()];
      out.read(temp);
      System.out.println("---");
      System.out.println(((Charset) c[x]).displayName());
      System.out.println(new String(temp,((Charset) c[x]).displayName()));
    }
  }
}


Вот надо чтоб символы взятые с потока cmd - выводились собственно нормально. С кодировкой с Charset'ом вообще работаю впервые(мож чё не так). Но ни одна кодировка не выдает приемлимый результат.
Кто виноват, и что делать??

Автор: LSD 3.12.2005, 17:55
Тут 2 варианта или заставить cmd писать в кодировке умолчальной для системы выполнив в нем chcp 1251 или читать из него в нужной кодировке:
Код
InputStreamReader reader = new InputStreamReader(in, "Cp866");

Второй вариант предпочтительней, т.к. универсальней.

Автор: Alexandr87 3.12.2005, 18:43
Это чтож такое получается - availableCharsets(). Не возвращает всех доступных кодировок. И как тады получить полный список.

Автор: LSD 3.12.2005, 19:02
Цитата(Alexandr87 @ 3.12.2005, 18:43)
Это чтож такое получается - availableCharsets(). Не возвращает всех доступных кодировок.

Возвращает, просто ты забываешь про aliases.
Код
SortedMap<String, Charset> charsets = Charset.availableCharsets();
for(String charsetName : charsets.keySet())
{
  Charset charset = charsets.get(charsetName);
  System.out.print(charsetName + "[name=" + charset.name() + ", displayName=" + charset.displayName() + ", {");
  for(String alias : charset.aliases())
    System.out.print("alias=" + alias + ", ");
  System.out.println("}]");
}

Автор: Alexandr87 5.12.2005, 04:13
Спасибо

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)