Как определить, что файл не имеет кодировки utf-8? - PullRequest
0 голосов
/ 28 октября 2018

В Java, как можно проверить файл на то, что его кодировка определенно не utf-8?

Я хочу иметь возможность проверить, если содержимое правильно сформировано utf-8.

Кроме того, также необходимо проверить, что файл не начинается с метки порядка байтов (BOM).

1 Ответ

0 голосов
/ 29 октября 2018

Если вам просто нужно протестировать файл, не сохраняя его содержимое:

Path path = Paths.get("/home/dave/somefile.txt");
try (Reader reader = Files.newBufferedReader(path)) {
    int c = reader.read();
    if (c == 0xfeff) {
        System.out.println("File starts with a byte order mark.");
    } else if (c >= 0) {
        reader.transferTo(Writer.nullWriter());
    }
} catch (CharacterCodingException e) {
    System.out.println("Not a UTF-8 file.");
}
  • Files.newBufferedReader всегда использует UTF-8, если кодировка не указана.
  • 0xfeff - кодовая точка метки порядка байтов.
  • reader.transferTo (Writer.nullWriter ()) (доступно с Java 11) обрабатывает файл и немедленно удаляет его.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...