Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > изменение кодировки для коллекции документов


Автор: iraidaaa 18.4.2013, 19:01
Здравствуйте, скажите,пожалуйста,возможно ли в программе осуществить изменение кодировки файлов?! Допустим, у меня есть папка с документами разных форматов(doc, html, pdf), нужно, чтобы все документы папки стали в кодировке UTF-8.

Автор: Samotnik 18.4.2013, 22:08
Слишком общее задание, но в теории можно, почему нет. Вопрос в выборе инструмента и на сколько удобно/быстро это будет работать.  В любом случае, всегда можно вычитать файл в стрим, изменить кодировку и положить стрим обратно, либо создать новый файл.

Автор: iraidaaa 19.4.2013, 04:11
Samotnik, вот смотрите, я преобразовываю в сисмвольный поток InputStreamReader и меняю кодировку, каким образом мне потом обратно в файлы преобразовать?

Автор: math64 19.4.2013, 10:14
Открываешь InputStreamReader в одной кодировке, считываешь (преобразуется в Unicode), открываешь OutputStreamReader в другой и переписываешь записанное.
Но трудности с тем, что нужно ещё заменить кодировку в заголовке в html:
Код

<meta http-equiv="content-type" content="text/html; charset=...">

и в xml:
Код

<?xml version="1.0" encoding="..."?>

Автор: iraidaaa 19.4.2013, 10:47
math64, вы имеете ввиду ,что у html-файлов я таким образом не смогу поменять кодировку?!

Автор: math64 19.4.2013, 10:54
Я имею в виду, что кроме замены кодировки, нужно искать объявление кдировки в файле и заменять название кодировки.

Автор: iraidaaa 19.4.2013, 11:06
math64, ммм, понятно..но это реально осуществить?


Автор: math64 19.4.2013, 22:13
Конечно, реально. Считываешь весь файл в строку и ищешь информацию о кодировке с помощью regexp, например. Заменяешь и записываешь в новой кодировке.
Другой вопрос, если во входном файле есть символы, которые отсутствуют в выходной кодировке. Их нужно заменять на &#nnn; - сложнее, но тоже решаемо.

Автор: iraidaaa 21.4.2013, 13:52
Я пока просто пробую менять кодировку txt файлов вот таки образом
Код

 File f=new File("c:/temp/file.txt");
 FileInputStream fis=new FileInputStream(f);
 BufferedReader br = new BufferedReader(new InputStreamReader(fis,"UTF-8"));
      
       String str;
      do 
   
       {  str=br.readLine();
         System.out.println(str);  
  
       }
          while ((str=br.readLine())!=null);
         br.close();

 Но почему-то в консоли отображаются квадратики, а если я делаю построчный вывод в файл, то отображаются ромбики с вопросами....В чем может быть проблема???

Автор: iraidaaa 21.4.2013, 14:57

переписала вот так, всё нормально выводит

Код

 File f=new File("c:/temp/file.txt");
 FileInputStream fis=new FileInputStream(f);
 BufferedReader br = new BufferedReader(new InputStreamReader(fis,"Cp-1251"));
      
       String str;
      do 
   
       {  str=br.readLine();
         System.out.println(str);  
  
       }
          while ((str=br.readLine())!=null);
         br.close();

Автор: iraidaaa 21.4.2013, 17:12
Я решила просто doc сохранить в txt; но теперь возникла другая проблема...при построчном чтении пропускаются строки, с чем это может быть связано???

Автор: dorogoyIV 21.4.2013, 22:14
Цитата(iraidaaa @  21.4.2013,  17:12 Найти цитируемый пост)
при построчном чтении пропускаются строки, с чем это может быть связано???

убери "do" что бы два раза не считывалось
Код

String str;

while((str = br.readLine()) != null)
{
 System.out.println(str);
}
br.close();

Автор: iraidaaa 22.4.2013, 06:00

dorogoyIV, когда я делала цикл с предусловием, то происходила ошибка после считывания последней строки

Автор: math64 22.4.2013, 07:45
Цитата(iraidaaa @  21.4.2013,  13:52 Найти цитируемый пост)
Но почему-то в консоли отображаются квадратики, а если я делаю построчный вывод в файл, то отображаются ромбики с вопросами....В чем может быть проблема??? 

Консоль по умолчанию использует кодировку 866. Переведите её в 1251 или сохраняйте в файл.

Автор: iraidaaa 22.4.2013, 07:57
math64 , с этим я уже справилась.Но теперь другая проблема:
Я решила просто doc сохранить в txt; но теперь возникла другая проблема...при построчном чтении пропускаются строки, с чем это может быть связано??? 

Автор: math64 22.4.2013, 14:55
doc это документ Microsoft Word ? Тогда для его чтения нужна спец. библиотека. что нибудь типа poi.apache.org

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)