java - 文件charset

时间:2011-10-20 16:33:10

标签: java windows file character-encoding

我有一个应用程序,它会处理一些文本,然后将其保存到文件中。

当我从NetBeans IDE运行它时,System.outPrintWriter都正常工作,并且正确显示/保存非ACSII字符。但是,如果我从Windows 7命令行运行JAR(在这种情况下使用cp1250 (欧洲中部)编码)屏幕输出和保存的文件被破坏。

我尝试将UTF-8放到PrintWriter的构造函数中,但它没有帮助......它不会影响System.out,即使在此之后它也会被破坏。< / p>

为什么它在IDE中工作而不在cmd.exe
我会理解System.out有一些问题,但为什么输出文件也会受到影响?

如何解决此问题?

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题。 实际原因是,当您的代码在NetBeans环境中运行时,NetBeans会自动设置系统的属性。

您可以看到,当您使用NetBeans运行代码时,下面的代码可能会打印&#34; UTF-8&#34;。但是当你使用cmd运行它时,你肯定会看到&#34; cp1256&#34;。

System.getProperty("file.encoding"); 

你应该注意到在使用&#39; setProperty&#39;将改变&#39; getProperty&#39;的输出功能,它不会对输入/输出产生任何影响。 (因为它们都是在调用main函数之前设置的。)

考虑到这一背景,当您想要从文件中读取并写入文件时,最好使用以下代码:

    File f = new File(sourcePath);

阅读:

InputStreamReader isr = new InputStreamReader(
    new FileInputStream(f), Charset.forName("UTF-8"));

和写作(我没有测试过):

OutputStreamWriter osw = new OutputStreamWriter(
    new FileOutputStream(f), Charset.forName("UTF-8"));

主要区别在于这些类在其构造函数中需要Charset,但像FileWrite和PrintWrite这样的类并不适用。 我希望这对你有用。