【发布时间】:2021-05-02 09:48:57
【问题描述】:
第一次发帖,有个问题。
我正在使用 JFrame 和 JTextArea,将我的控制台输出重定向到 JTextArea。在控制台中它正确显示。这是重定向的代码:
public PrintStream redirectOut() {
OutputStream out = new OutputStream() {
@Override
public void write(int b) throws IOException {
String k = String.valueOf((char) b);
byte[] o = k.getBytes();
String text = new String(o,"Cp1252");
output.append(k);
}
};
PrintStream ps = new PrintStream(out);
System.setOut(ps);
System.setErr(ps);
return ps;
}
如果我将字符“é”以相同的方式放入 TextArea 中,它会正确显示,但不是这样。这是为什么?有人有解决方案吗? (输出是我的 JTextArea) 谢谢!
【问题讨论】:
-
显示正确,但不是这样 抱歉,我不明白那个说法。除此之外,不要解释你的代码应该做什么。而是给出一个真正的minimal reproducible example,在你的情况下,只是一个带有 textarea 和那个文本的 jframe,也许是你得到的截图。并更好地解释您认为错误的地方。
-
它应该是 Marie-héléne 但显示:Marie-h←l│ne 如果我用文本而不是 k 更改它,它会显示:Marie-h?l?ne
-
不要将此类信息放入 cmets,请相应地编辑您的问题。
-
你在
OutputStream中做了一些奇怪的事情,得到了奇怪的结果。这是预期的行为。b是默认字符编码中的字节值。您将其解释为char,这是错误的,然后您调用getBytes(),它使用默认字符编码将错误解释的字符转换为字节数组,然后,您使用new String(o,"Cp1252")解释字节数组使用显式编码。也许它匹配默认编码,也许不匹配。
标签: java string swing encoding jtextarea