Java 显示特殊字符
在Windows控制台上显示特殊字符时遇到问题 我编写了以下代码: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
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吗?