System.setProperty не работает для file.encoding в Java - PullRequest
0 голосов
/ 01 февраля 2019

У меня есть эта простая программа, где я пытаюсь создать текстовый файл в формате UTF-8.Тем не менее, я вижу, что файл не кодируется 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 голосов
/ 01 февраля 2019

Когда вы создаете новый файл, он изначально пуст.«Кодировка» - это не свойство файла, а то, как вы интерпретируете его байты содержимого.Вот почему вы должны указывать кодировку перед чтением и записью, потому что она нигде не сохраняется.

Без содержимого кодировка является неопределенной.Ваш редактор, вероятно, выбирает его первое предположение, которое может быть ASCII.Но пустой контент, вероятно, может быть декодирован в любой кодировке.

Если вы напишите какой-то текст в файл в вашем коде, он будет закодирован в UTF-8.Ваш редактор также покажет свою кодировку как таковую (при условии, что она хорошая и может правильно ее определить).

0 голосов
/ 01 февраля 2019

Вы можете использовать приведенный ниже код для создания файла UTF-8

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