1
我的应用程序有一个控制台,其中所有系统的打印流内容都被重新路由到。将控制台输出添加到可以支持特殊字符的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);
这个类重新打印printstream:
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(“Consolas”,Font.PLAIN,12);'此字体是否支持相关字符集? –
@AndrewThompson你是对的,字体似乎不支持特殊字符,但另一个问题是,写方法无法正确使用UTF-8,根据其他评论。 – Andrio