Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.147.104.120] |
|
Сообщ.
#1
,
|
|
|
Добрый день уважаемые.
Подскажите, что пропустил? Почему при чтении из файла, где присутствуют русские буквы получаю знаки вопроса? try(SeekableByteChannel fChan = Files.newByteChannel(Paths.get("C:\\log"))) { ByteBuffer mBuf = ByteBuffer.allocate(512); do { count = fChan.read(mBuf); if(count != -1) { mBuf.rewind(); for(int i= 0; i < count; i++) System.out.print((char)mBuf.get()); } } while(count != -1); System.out.println(); } catch(IOException e) { System.out.println("I/O Error: " +e); } Как указать кодировку? |
Сообщ.
#2
,
|
|
|
используй InputStreamReader указав нужный чарсет
|
Сообщ.
#3
,
|
|
|
Цитата d_k @ используй InputStreamReader указав нужный чарсет Интересует именно как в данном коде сделать. Добавлено В общем решил так, может кому пригодиться: import java.nio.charset.Charset; try(SeekableByteChannel fChan = Files.newByteChannel(Paths.get("C:\\log"))) { ByteBuffer mBuf = ByteBuffer.allocate(512); String encoding = System.getProperty("file.encoding"); do { count = fChan.read(mBuf); if(count != -1) { mBuf.rewind(); for(int i= 0; i < count; i++) System.out.print(Charset.forName(encoding).decode(mBuf)); } } while(count != -1); System.out.println(); } catch(IOException e) { System.out.println("I/O Error: " +e); } |
Сообщ.
#4
,
|
|
|
привет всем, похожая проблема, дабы не создавать новую тему спрошу здесь
Читаю из консоли вывод запущенной консольной программы //здесь запуск идет p = r.exec("..."); //... // читаю вывод консоли InputStream out = p.getInputStream(); InputStreamReader isr = new InputStreamReader(out, "UTF-8"); BufferedReader br = new BufferedReader(isr); // String strRead = null; while ( (strRead = br.readLine()) != null ) { System.out.println( strRead ); } Выводятся кракозябры, пробовал разные другие методы, но также не помогает, укажите на ошибку |
Сообщ.
#5
,
|
|
|
Какая ОС? В Linux всё по умолчанию в UTF-8, должно было бы работать. В Windows гораздо запутаннее.
Ошибка может быть в несовпадении кодировок как читаемого потока с заданной в конструкторе InputStreamReader, так и выдаваемого Java-программой вывода с кодировкой терминала. Убедиться, верно ли Вы читаете входящий поток, можно, попутно записывая строки в файл с заданной кодировкой. Второе является головной болью для подавляющего большинства консольных программ в винде: терминал по умолчанию настроен на кодировку DOS (CP866), а программы выводят в CP1251 или UTF-8. По умолчанию -- CP1251, скорее всего (Почему не Unicode). Как перенастроить терминал -- не подскажу, а временно изменить кодировку в программе можно так: System.setOut(new java.io.PrintStream(System.out, true, "Cp866")); |
Сообщ.
#6
,
|
|
|
Win 8.1
CHCP Текущая кодовая страница: 866 InputStream out = p.getInputStream(); InputStreamReader isr = new InputStreamReader(out, "Cp866"); BufferedReader br = new BufferedReader(isr); String strRead = null; while ( (strRead = br.readLine()) != null ) { System.out.println(strRead ); } Вот так заработало! Спасибо kopilov |