显示特殊字符

nam*_*ked 1 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);
    FileWriter write = new FileWriter(newOutFile);
    PushbackReader reader = new PushbackReader(read);
    int c;

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

}
Run Code Online (Sandbox Code Playgroud)

输出文件准确显示输入文件将包含特殊字符的内容.即对于输入文件中的内容 © Ø ?? abcdef?,输出文件包含完全相同的内容.但是当我添加该行时System.out.printf("%c", (char) c),控制台上的内容是:( ÿþ©包含更多字符,但我无法在此处复制粘贴).我确实读过该问题可能与Windows控制台字符集有关,但无法找到它的修复程序.

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

任何人都可以帮我理解这个问题,我该如何解决?

Bal*_*usC 5

ReaderWriter将使用平台默认字符集转换为字符的字节.在您的环境中,显然不是像UTF-8那样的Unicode兼容字符集.

您需要InputStreamReader并且OutputStreamWriter您可以在其中明确指定字符集.

Reader read = new InputStreamReader(new FileInputStream(newFile), "UTF-8"));
Writer write = new OutputStreamWriter(new FileOutputStream(newOutFile), "UTF-8"));
// ...
Run Code Online (Sandbox Code Playgroud)

此外,控制台需要配置为使用UTF-8来显示字符.例如,Eclipse可以通过Window> Preferences> General> Workspace> Text File Encoding来实现.

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

也可以看看: