我在記錄器中遇到了困難,我將其嵌入到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這顯然是錯誤的,但是再次,它可能與這個問題無關。 –