В моем приложении есть консоль, на которой перенаправляется весь контент для печати в системе.Добавление вывода консоли в Swing gui, который может поддерживать специальные символы
Мое приложение будет также вывода специальных символов, в частности на других языках (азиатские языки, русский, арабский и т.д.)
Я использую JTextArea как консоль из:
consoleOutput = new JTextArea(1, 50);
DefaultCaret caret = (DefaultCaret) consoleOutput.getCaret();
caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);
Font font = new Font("Consolas", Font.PLAIN, 12);
consoleOutput.setFont(font);
JScrollPane scrollPane = new JScrollPane(consoleOutput);
this.add(scrollPane, BorderLayout.CENTER);
//CHANGE OUTPUT TO THIS CONSOLE
PrintStream out = new PrintStream(new TextAreaOutput(consoleOutput));
System.setOut(out);
System.setErr(out);
И этот класс для перенаправления печати:
public class TextAreaOutput extends OutputStream {
JTextArea outputConsole;
public TextAreaOutput(JTextArea outputConsole) {
this.outputConsole = outputConsole;
}
@Override
public void write(int b) throws IOException {
outputConsole.append(String.valueOf((char)b));
}
}
Это работает, и печать распространяется на этот jtextarea. Однако у меня проблемы с кодировкой. Специальные символы, такие как ▒, █, .نت, 览, etc
, не отображаются правильно. Некоторые могут быть жестко закодированы в исходные файлы (я использую UTF-8), но некоторые могут быть извлечены из Интернета с помощью selenium webdriver.
Unicode символы более чем 1 байт длиной. В UTF-8 каждый символ может быть представлен от 1 до 6 байтов. Поэтому ваш метод 'write' не будет работать. Вы можете изучить UTF-8 и разработать более эффективный метод. – RealSkeptic
'Font font = new Font (« Консола », Font.PLAIN, 12);' Поддерживает ли этот шрифт соответствующие наборы символов? –
@AndrewThompson. Вы правы, шрифт, похоже, не поддерживает специальные символы, но еще одна проблема заключается в том, что метод записи не работает правильно с UTF-8, за другой комментарий. – Andrio