java文件字符集

java文件字符集,java,windows,file,character-encoding,Java,Windows,File,Character Encoding,我有一个应用程序,它处理一些文本,然后将其保存到文件中 当我从NetBeans IDE运行它时,System.out和PrintWriter工作正确和非ACSII字符都正确显示/保存。但是,如果我从Windows7命令行(在本例中使用cp1250(中欧)编码)运行JAR,屏幕输出和保存的文件将被破坏 我试图将UTF-8放入PrintWriter的构造函数中,但没有任何帮助……而且它也不会影响System.out,即使这样,它也会被破坏 为什么它在IDE中工作而不是在cmd.exe中工作? 我知道

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

当我从NetBeans IDE运行它时,
System.out
PrintWriter
工作正确和非ACSII字符都正确显示/保存。但是,如果我从Windows7命令行(在本例中使用
cp1250
(中欧)编码)运行JAR,屏幕输出和保存的文件将被破坏

我试图将
UTF-8
放入
PrintWriter
的构造函数中,但没有任何帮助……而且它也不会影响
System.out
,即使这样,它也会被破坏

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


如何解决此问题?

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

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

您应该注意,虽然使用“setProperty”会更改“getProperty”函数的输出,但它不会对输入/输出产生任何影响。(因为它们都是在调用主函数之前设置的。)

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

    File f = new File(sourcePath);
阅读:

InputStreamReader isr = new InputStreamReader(
    new FileInputStream(f), Charset.forName("UTF-8"));
对于写作(我没有测试过):

主要区别在于这些类在其构造函数中获得所需的字符集,但FileWrite和PrintWrite之类的类则没有。
我希望这对你有用。

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

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

您应该注意,虽然使用“setProperty”会更改“getProperty”函数的输出,但它不会对输入/输出产生任何影响。(因为它们都是在调用主函数之前设置的。)

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

    File f = new File(sourcePath);
阅读:

InputStreamReader isr = new InputStreamReader(
    new FileInputStream(f), Charset.forName("UTF-8"));
对于写作(我没有测试过):

主要区别在于这些类在其构造函数中获得所需的字符集,但FileWrite和PrintWrite之类的类则没有。
我希望这对您有用。

在我的语言环境中,我更改cmd.exe属性中的字体。之后,带有非ASCII符号的控制台输出看起来很好。可能这有助于您解决控制台问题,但文件问题有所不同-数据已从web下载,在从字节到字符串的处理过程中,我忘记了“考虑”字符集…在我的语言环境中,我更改了cmd.exe属性中的字体。之后,带有非ASCII符号的控制台输出看起来很好。可能这有助于您解决控制台问题,但文件问题有所不同-数据是从web下载的,在从字节到字符串的处理过程中,我忘记了“考虑”字符集。。。