我有一个应用程序,它会处理一些文本,然后将其保存到文件中。
当我从NetBeans IDE运行它时,System.out
和PrintWriter
都正常工作,并且正确显示/保存非ACSII字符。但是,如果我从Windows 7命令行运行JAR(在这种情况下使用cp1250
(欧洲中部)编码)屏幕输出和保存的文件被破坏。
我尝试将UTF-8
放到PrintWriter
的构造函数中,但它没有帮助......它不会影响System.out
,即使在此之后它也会被破坏。< / p>
为什么它在IDE中工作而不在cmd.exe
?
我会理解System.out
有一些问题,但为什么输出文件也会受到影响?
如何解决此问题?
答案 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这样的类并不适用。 我希望这对你有用。