System.setProperty无法在Java中用于file.encoding

时间:2019-02-01 12:16:03

标签: java file utf-8 system

我有一个简单的程序,其中,我试图创建UTF-8格式的txt文件。但是,我看到该文件未使用UTF-8编码,但显示编码已设置为ANSI。以下是输出。你能帮忙吗?

public class fileCreate {
   public static void main(String[] args) {
      try {
             System.out.println("Before encoding: "+System.getProperty("file.encoding"));
             System.setProperty("file.encoding","UTF-8");
             System.out.println("After encoding: "+System.getProperty("file.encoding")); 

             File file = new File("C:/tmp/myfile_UTF-8.txt");

             if(file.createNewFile())System.out.println("Success!");
               else System.out.println ("Error, file already exists.");
          }
          catch(IOException ioe) {
          ioe.printStackTrace();
          }
      }
   }

输出:

编码前:Cp1252

编码后:UTF-8

成功!

2 个答案:

答案 0 :(得分:0)

当您创建一个新的文件,它最初是空的。 “编码”不是文件的属性,而是您解释其内容字节的方式。这就是为什么在读写之前必须指定编码的原因,因为它没有存储在任何地方。

如果没有内容,编码是样未定义。你可能编辑挑选了第一次的猜测,这可能是ASCII。但空内容,也许可以与任何编码进行解码。

如果您在代码中向文件中写入了一些文本,则它将以UTF-8编码。然后,您的编辑器也将显示其编码(前提是它是一种很好的编码并且可以正确检测到它)。

答案 1 :(得分:-1)

您可以使用以下代码创建UTF-8文件

PrintWriter out1 = new PrintWriter(new File("C:/tmp/myfile_UTF-8.txt"), "UTF-8");