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

Итак, у меня есть файл в кодировке ISO8859-1. Я делаю следующее:

InputStreamReader isr = new InputStreamReader(new FileInputStream(fileLocation));
System.out.println(isr.getEncoding());

И я получаю UTF8 ... Похоже, FileInputStream или InputStreamReader преобразовать его в UTF8.

Да, я знаю о следующем способе:

BufferedReader br = new BufferedReader(
     new InputStreamReader(
     new FileInputStream(fileLocation), "ISO-8859-1");

Но я заранее не знаю, какую кодировку будет иметь мой файл.

Как прочитать файл с сохранением кодировки?

1 Ответ

0 голосов
/ 06 сентября 2018

Двоичные файлы (байты), которые на самом деле являются текстом в некоторой кодировке для этих байтов, к сожалению, где-то не хранят кодировку (кодировку).

Иногда где-то присутствует кодировка: текст Unicode может иметь необязательный символ спецификации в начале файла. HTML и XML могут указывать кодировку.

Если вы загрузили файл из Интернета в строках заголовка, можно указать кодировку. Скажем, это был файл HTML, и Content-Type: text/html; charset=Windows-1251. Затем вы можете прочитать файл в Windows-1251 и всегда сохранять его как UTF-8, изменив / добавив <meta charset="UTF-8">.

Но в целом нет решения для определения кодировки какого-либо файла. Вы могли бы сделать:

  • читать байты
  • если преобразовано в UTF-8 без ошибок в многобайтовых последовательностях, это UTF-8
  • в противном случае это однобайтовая кодировка, по умолчанию Windows-1252 (а не ISO-8859-1)
  • возможно, используйте таблицы частот слов некоторых языков вместе с кодировками и попробуйте их
  • записать байты в определенной кодировке в файл как UTF-8

Может быть, библиотека делает такое; объединение распознавания языка и распознавания кодировки.

...