Java 显示特殊字符

Java 显示特殊字符,java,unicode,Java,Unicode,在Windows控制台上显示特殊字符时遇到问题 我编写了以下代码: public static void main(String[] args) throws IOException { File newFile = new File("sampleInput.txt"); File newOutFile = new File("sampleOutput.txt"); FileReader read = new FileReader(newFile); File

在Windows控制台上显示特殊字符时遇到问题

我编写了以下代码:

public static void main(String[] args) throws IOException {
    File newFile = new File("sampleInput.txt");
    File newOutFile = new File("sampleOutput.txt");

    FileReader read = new FileReader(newFile);
    FileWriter write = new FileWriter(newOutFile);
    PushbackReader reader = new PushbackReader(read);
    int c;

    while ((c = reader.read()) != -1)
    {
        write.write(c);
    }
    read.close();
    write.close();

}
输出文件看起来与输入文件中包含的特殊字符完全相同。i、 e.对于输入文件©ØŻƩabcdefĦ中的内容,输出文件包含完全相同的内容。但是当我添加行
System.out.printf(“%c”,(char)c)
时,控制台上的内容是:
。我确实读到,问题可能出在Windows控制台字符集上,但无法找到解决方法

考虑到将来输出介质可以是任何东西,我不想遇到任何类型的
out
流的Unicode字符显示问题


有人能帮我理解这个问题吗?我如何解决这个问题?

读卡器和写卡器将使用平台默认字符集将字符转换为字节。在您的环境中,这显然不是像UTF-8那样的Unicode兼容字符集

您需要并且可以在其中显式指定字符集

Reader read = new InputStreamReader(new FileInputStream(newFile), "UTF-8"));
Writer write = new OutputStreamWriter(new FileOutputStream(newOutFile), "UTF-8"));
// ...
此外,控制台需要配置为使用UTF-8显示字符。例如,在Eclipse中,您可以通过窗口>首选项>常规>工作区>文本文件编码来实现这一点

在命令提示控制台中,由于缺少支持这些字符的字体,因此无法显示这些字符。您希望采用类似Swing的UI控制台方法

另见:

读卡器和写卡器将使用平台默认字符集将字符转换为字节。在您的环境中,这显然不是像UTF-8那样的Unicode兼容字符集

您需要并且可以在其中显式指定字符集

Reader read = new InputStreamReader(new FileInputStream(newFile), "UTF-8"));
Writer write = new OutputStreamWriter(new FileOutputStream(newOutFile), "UTF-8"));
// ...
此外,控制台需要配置为使用UTF-8显示字符。例如,在Eclipse中,您可以通过窗口>首选项>常规>工作区>文本文件编码来实现这一点

在命令提示控制台中,由于缺少支持这些字符的字体,因此无法显示这些字符。您希望采用类似Swing的UI控制台方法

另见:

代替FileWriter尝试使用OutputStreamWriter并指定输出的编码。

代替FileWriter尝试使用OutputStreamWriter并指定输出的编码。

谢谢BalusC,但您的更改也会将我的内容写入写入输出文件。我在Eclipse中更改了字符集,但输入文件中的内容仍不相同。我遗漏了什么?那么原始文件显然没有保存在UTF-8中。我以前做过。也许,这就是为什么它显示了完全相同的内容而没有弄糟。对不起,你是对的。输入文件是Unicode格式,而不是UTF-8。UTF-8是一种Unicode格式。你的意思是输入文件被保存为UTF-16吗?谢谢BalusC,但是你的更改也会把我写入的输出文件的内容弄乱。我在Eclipse中更改了字符集,但输入文件中的内容仍不相同。我遗漏了什么?那么原始文件显然没有保存在UTF-8中。我以前做过。也许,这就是为什么它显示了完全相同的内容而没有弄糟。对不起,你是对的。输入文件是Unicode格式,而不是UTF-8。UTF-8是一种Unicode格式。您的意思是输入文件保存为UTF-16吗?