java - 如何使用正确的编码将所有控制台输出重定向到 Swing JTextArea/JTextPane?

标签 java encoding stdout nio

我一直在尝试将 System.out PrintStream 重定向到 JTextPane。这工作正常,除了特殊语言环境字符的编码。我找到了很多关于它的文档(参见 mindprod encoding page ),但我仍在与它作斗争。 StackOverFlow 中发布了类似的问题,但据我所知,编码并未得到解决。

第一种解决方案:

String sUtf = new String(s.getBytes("cp1252"),"UTF-8");

第二种解决方案应该使用 java.nio。我不明白如何使用字符集。

Charset defaultCharset = Charset.defaultCharset() ;
byte[] b = s.getBytes();
Charset cs = Charset.forName("UTF-8");
ByteBuffer bb = ByteBuffer.wrap( b );
CharBuffer cb = cs.decode( bb );
String stringUtf = cb.toString();
myTextPane.text = stringUtf

这两种解决方案都行不通。有什么想法吗?

提前致谢, 杰格兰

最佳答案

试试这段代码:

public class MyOutputStream extends OutputStream {

private PipedOutputStream out = new PipedOutputStream();
private Reader reader;

public MyOutputStream() throws IOException {
    PipedInputStream in = new PipedInputStream(out);
    reader = new InputStreamReader(in, "UTF-8");
}

public void write(int i) throws IOException {
    out.write(i);
}

public void write(byte[] bytes, int i, int i1) throws IOException {
    out.write(bytes, i, i1);
}

public void flush() throws IOException {
    if (reader.ready()) {
        char[] chars = new char[1024];
        int n = reader.read(chars);

        // this is your text
        String txt = new String(chars, 0, n);

        // write to System.err in this example
        System.err.print(txt);
    }
}

public static void main(String[] args) throws IOException {

    PrintStream out = new PrintStream(new MyOutputStream(), true, "UTF-8");

    System.setOut(out);

    System.out.println("café résumé voilà");

}

}

关于java - 如何使用正确的编码将所有控制台输出重定向到 Swing JTextArea/JTextPane?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1522444/

相关文章:

javac 优化标志

java - 我不希望我的应用在打开 URL 时出现在选择器对话框中

python - 如何防止 Docker 弄乱子进程输出顺序? (包括 MCVE)

c - 默认文件描述符表无法正常工作

c++ - 将 header 中声明的 QTextStream 设置为标准输出

java - 将 '\n' 替换为另一个字符无法正常工作

Java HashMap 和底层 values() 集合

php - 将网站编码从 ISO-8859-1 切换为 UTF-8

matlab - 如何确定 LDPC 生成器矩阵形成奇偶校验矩阵 (802.16e)

php - 将UTF8文本存储到PHP变量并正确输出