| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: Общие вопросы > Кодировка текста в java |
| Автор: develjar 29.5.2016, 10:50 | ||
| При открытии txt файла в консоли NetBeans, английские буквы отображаются нормально, а русский получаются символами, как сделать нормальную кодировку и вывод этого всего в JTextArea, а не в консоль? Код:
|
| Автор: LSD 30.5.2016, 11:47 |
| Вместо FileReader использовать InputStreamReader и явно указать ему правильную кодировку. |
| Автор: develjar 31.5.2016, 12:27 | ||
Заменил. Выдает ошибку в строке которую заменил Код: mi1.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent event) { JFileChooser fileopen = new JFileChooser(); int ret = fileopen.showDialog(null, "Открыть файл"); if (ret == JFileChooser.APPROVE_OPTION) { } File f = fileopen.getSelectedFile(); try (Reader reader = new InputStreamReader(new FileInputStream(pathToFile), <encoding>)) { char[] buffer = new char[(int)f.length()]; reader.read(buffer); System.out.println(new String(buffer)); } catch(IOException tx){ System.out.println(tx.getMessage()); } } }); |
| Автор: LSD 31.5.2016, 15:08 |
Исправь ошибку. |
| Автор: develjar 31.5.2016, 16:11 | ||
try (Reader reader = new InputStreamReader(new FileInputStream(), "UTF-8")) файл должен указываться вручную . |
| Автор: develjar 31.5.2016, 19:01 |
Тут проблема в том , что при выводе на консоль выводится нормально, но в JTextArea, какую не ставь кодировку отображается все равно квадратами. По этому тут уже другой вопрос. JTextArea tx = new JTextArea (30,50); tx.read( new FileReader( f.getAbsolutePath() ), null ); |
| Автор: SVN74 31.5.2016, 23:31 | ||
По видимому у вас кодировка файла "windows-1251", вот набросал для, работает с JTextArea...
|
| Автор: develjar 1.6.2016, 12:56 | ||||
И в чем разница с этим кодом? Код: File f = fileopen.getSelectedFile(); try (Reader reader = new InputStreamReader(new FileInputStream(f), "Cp1251")) { char[] buffer = new char[(int)f.length()]; reader.read(buffer); tx.read( new FileReader( f.getAbsolutePath() ), null ); } catch(IOException tx){ System.out.println(tx.getMessage()); } } }); |
| Автор: LSD 1.6.2016, 17:27 | ||
НИКОГДА так не делайте. Если у вас "кракозябры" в String, то исправлять надо метод которые читает данные из байтов, а не костылить строки. develjar, 1. Начни уже пользоваться тегами [Код], невозможно же читать. 2. Зачем ты вначале создаешь Reader reader, а потом упорно продолжаешь как и раньше tx.read(new FileReader(f.getAbsolutePath() ), null); ? |
| Автор: develjar 1.6.2016, 21:06 | ||
Это нашел в примере как сделать,оттуда скопировал, по этому ни чего не могу сказать |
| Автор: SVN74 1.6.2016, 22:10 | ||
Разница в том, что это работает.... Взят файл с соответствующей кодировкой для проверки Если добавить ... tx.setText(str); , все отображается правильно... |
| Автор: develjar 2.6.2016, 12:00 | ||
Да, правильно. |