我在记录器中遇到了困难,我将其嵌入到JTextArea
中:当我调用logger.append()
方法时,它工作正常,但当我使用System.out.println()
时,我所有的法语口音都丢失。使用Java中的System.out编码问题
在这里,您创建了记录器并将System.out
和System.err
重定向到它。
this.logger = new TextAreaOutputStream(jta, jsp.getVerticalScrollBar());
System.setProperty("user.langage", "fr");
PrintStream ps;
ps = new PrintStream(this.logger, true, "UTF-8");
System.setOut(ps);
System.setErr(ps);
在这里,你有TextAreaOutputStream
类。
import java.io.IOException;
import java.io.OutputStream;
import javax.swing.JScrollBar;
import javax.swing.JTextArea;
public class TextAreaOutputStream extends OutputStream {
private JTextArea jta;
private JScrollBar jsb;
public TextAreaOutputStream(JTextArea jta, JScrollBar jsb) {
this.jta = jta;
this.jsb = jsb;
}
public synchronized void append(String s) {
this.jta.append(s);
scroll();
}
public synchronized void write(int b) throws IOException {
jta.append(String.valueOf((char) b));
if (((char) b) == '\n')
scroll();
}
private synchronized void scroll() {
if ((jsb.getValue() + jsb.getVisibleAmount()) == jsb.getMaximum())
jta.setCaretPosition(jta.getDocument().getLength());
}
}
我试图PrintStream
的编码改为随机编码,它改变了印错口音的样子,但我从来没有拥有它的权利。我还尝试使用unicode条目(如\u00e9
)更改重音符号é
,但它没有改变任何内容。
在这里,我已经够拼命找你帮忙,
罗曼
你确定“user.langage”吗?是不是“user.language”(注意'u')? – fge
你应该检查你的开发工具中使用了哪些编码。如果你使用Eclipse,在项目 - >属性 - >资源上单击左边(并检查你是否使用UTF-8编码) – maqjav
@fge这显然是错误的,但是再次,它可能与这个问题无关。 –