Java 不同机器中的字符编码

Java 不同机器中的字符编码,java,Java,如果两台不同的机器具有不同的字符编码。如何从java程序中获取两台机器上相同的文件,应以类似的方式读取。是否可以使用java,或者我们必须手动设置两台机器的编码?听起来您只想使用以下内容: InputStream inputStream = new FileInputStream(...); Reader reader = new InputStreamReader(reader, "UTF-8"); // Or whatever encoding 基本上,您不必使用平台默认编码,而且几乎不应

如果两台不同的机器具有不同的字符编码。如何从java程序中获取两台机器上相同的文件,应以类似的方式读取。是否可以使用java,或者我们必须手动设置两台机器的编码?

听起来您只想使用以下内容:

InputStream inputStream = new FileInputStream(...);
Reader reader = new InputStreamReader(reader, "UTF-8"); // Or whatever encoding

基本上,您不必使用平台默认编码,而且几乎不应该这样做。
FileReader
总是使用平台默认编码,这是一件痛苦的事情:(我更喜欢明确指定编码,即使我明确指定要使用平台默认编码:)

您不需要更改机器的设置

您可以使用任何允许您设置字符编码的java.io.Reader子类。例如InputStreamReader,如下所示:

new InputStreamReader(new FileInputStream("file.txt"), "UTF8");

您可以控制在这两种环境中读取/写入文件。

您只能在读取端进行控制。

  • 您知道用于写入文件的编码:确定用于写入文件的编码,并使用相同的编码读取文件
  • 您不知道用于写入文件的编码:最好是猜测编码:
  • 更新


    如果您的问题是在eclipse控制台中看不到正确的输出,那么问题可能是eclipse本身的编码设置。阅读有关如何修复eclipse的e。

    如果文件编码为UTF-8,则当我通过指定编码为UTF-8并使用PrintStream ps1=new PrintStream(system.out,true,“UTF-8”)打印数据来读取文件时,系统默认编码为ISO-8859-1,这是我的senario;ps1.println(“ss”+str);//我无法打印文件中的unicode数据?我的系统默认编码为ISO-8859-1,我使用的是BufferedReader bis=new BufferedReader(new InputStreamReader(new FileInputStream(“filepath”),“UTF-8”);String str=bis.readLine();PrintStream ps1=新的PrintStream(System.out,true,“UTF-8”);ps1.println(str);但它并没有打印文件路径中提到的文件中的unicode字符