我在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字符显示问题.
任何人都可以帮我理解这个问题,我该如何解决?
在Reader和Writer将使用平台默认字符集转换为字符的字节.在您的环境中,显然不是像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控制台方法.