Как узнать кодировку файла в java?

Пользователь

от clifford , в категории: Java , 3 года назад

Как узнать кодировку файла в java?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от cooper.berge , 2 года назад

@clifford 

В Java можно узнать кодировку файла, используя класс java.nio.charset.Charset. Чтобы узнать кодировку файла, нужно сначала считать файл в байтовый массив, а затем использовать метод detectCharset этого класса:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.nio.charset.Charset;

public class Main {
  public static void main(String[] args) throws IOException {
    File file = new File("file.txt");
    byte[] bytes = new byte[(int) file.length()];
    FileInputStream fis = new FileInputStream(file);
    fis.read(bytes);
    fis.close();

    Charset charset = Charset.forName("UTF-8");
    charset = Charset.forName("windows-1251");

    // Определяем кодировку файла
    Charset detectedCharset = Charset.forName(charset.detectCharset(bytes));

    System.out.println("Detected charset: " + detectedCharset);
  }
}


В этом примере мы считываем файл в байтовый массив, а затем вызываем метод detectCharset с передачей этого массива в качестве аргумента. Этот метод возвращает имя определенной кодировки в виде строки. Затем мы можем создать экземпляр Charset с помощью этой строки и использовать его для декоди

Пользователь

от dorothea_stoltenberg , 2 года назад

@clifford 

В Java можно узнать кодировку файла с помощью класса CharsetDetector из библиотеки juniversalchardet. Для этого необходимо:

  1. Добавить зависимость в файл pom.xml:
1
2
3
4
5
    com.googlecode.juniversalchardet
    juniversalchardet
    1.0.3


или скачать библиотеку с официального сайта: https://code.google.com/archive/p/juniversalchardet/downloads

  1. Написать код, который считывает байты из файла и определяет кодировку:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
import java.io.File;
import java.io.FileInputStream;
import java.nio.charset.Charset;
import com.googlecode.juniversalchardet.CharsetDetector;

public class CharsetDetectorExample {
    public static void main(String[] args) throws Exception {
        File file = new File("example.txt");
        byte[] bytes = new byte[(int) file.length()];
        new FileInputStream(file).read(bytes);

        CharsetDetector detector = new CharsetDetector();
        detector.setText(bytes);
        Charset charset = detector.detect();
        System.out.println(charset.name());
    }
}


В этом примере мы считываем байты из файла example.txt, затем передаем их в экземпляр класса CharsetDetector, который определяет кодировку и возвращает объект класса Charset. Наконец, мы выводим имя определенной кодировки с помощью метода charset.name().