Как преобразовать (Java) файлы с разными кодировками в одну и ту же?

1

Я работаю над большим веб-приложением Java в Eclipse, чьи файлы имеют разные кодировки: некоторые из них находятся в UTF-8, другие в Cp1252, а другие - в ISO-8859-1 (без различия между исходными файлами JSP или java, или CSS), но я знаю кодировку каждого файла.

Я конвертирую проект в Maven, и это отличный повод превратить их всех в UTF-8.
Конечно, я не хочу потерять ни одного символа (так что полностью автоматические преобразования здесь не применяются).

Как мне это сделать? Есть ли инструмент, который может помочь мне гарантировать, что я не потеряю какой-либо особый характер?
Webapp находится на итальянском языке, поэтому, особенно в JSP, может быть много акцентированных букв (вероятно, не везде HTML-объекты были использованы).

Проект находится в Eclipse, но я могу использовать внешний редактор, если это облегчит преобразование.

  • 0
    Знаете ли вы, что некоторые файлы содержат символы, отличные от ASCII (т.е. за пределами 0x20-0x7F)?
  • 0
    @JimGarrison Абсолютно! Акцентированные буквы, несомненно, присутствуют во многих файлах (и другие символы могут быть также хорошо). Вот почему мне нужно что-то, что предупредит меня, если есть какой-либо персонаж, который может быть преобразован в какой-то другой.
Теги:
jsp
utf-8
encoding

2 ответа

0
Лучший ответ

Преобразование одного файла может быть выполнено с помощью функции iconv (я использовал LibIconv для Windows).

Он позволяет указать кодировки источника и назначения и предупреждает, когда символы не могут быть преобразованы.

Я попробовал это с несколькими исходными файлами, и все буквы с акцентом были правильно преобразованы в UTF-8 из Cp1252.

1

Очень легко написать код для конвертирования кодировок - хотя я бы ожидал, что в любом случае есть инструменты. Просто:

  • Создайте один FileInputStream в существующий файл и оберните его в InputStreamReader с соответствующей кодировкой
  • Создайте один FileOutputStream для нового файла и оберните его в OutputStreamWriter с соответствующей кодировкой
  • Переходите к читателю, читая символы в буфер и записывая содержимое этого буфера (столько же символов, сколько вы читаете), пока не прочитаете весь файл
  • Закройте все ресурсы (автоматически с помощью блока try-with-resources)

Первые два шага проще с Files.newBufferedReader и Files.newBufferedWriter.

  • 0
    Разве это не то же самое, что открыть файл в хорошем редакторе (например, Notepad ++) с определенной кодировкой, а затем сохранить файл в другом?
  • 0
    @watery: Сохранить в другом редакторе? Вам не нужно этого делать - вы должны быть в состоянии сохранить в том же редакторе. И да, вы можете сделать это - но, учитывая, что вы спрашиваете о переполнении стека, а не о суперпользователе, я предположил, что вы спрашивали об этом программно. Например, если у вас есть 100 файлов, вы не хотите делать их все вручную ...
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню