Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Кодировка текста в java 
V
    Опции темы
develjar
Дата 29.5.2016, 10:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 27.5.2016

Репутация: нет
Всего: нет



При открытии txt файла в консоли NetBeans, английские буквы отображаются нормально, а русский получаются символами, как сделать нормальную кодировку и вывод этого всего в JTextArea, а не в консоль?

Код: 

Код

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(FileReader reader = new FileReader(f)) 
         {
          char[] buffer = new char[(int)f.length()];
            reader.read(buffer);
            System.out.println(new String(buffer));
         }
         catch(IOException tx){
           System.out.println(tx.getMessage());
        }
            }        
      });

PM MAIL   Вверх
LSD
Дата 30.5.2016, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15708
Регистрация: 24.3.2004

Репутация: 209
Всего: 537



Вместо FileReader использовать InputStreamReader и явно указать ему правильную кодировку.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
develjar
Дата 31.5.2016, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 27.5.2016

Репутация: нет
Всего: нет



Цитата(LSD @ 30.5.2016,  11:47)
Вместо FileReader использовать InputStreamReader.


Заменил. Выдает ошибку в  строке  которую заменил

Код: 

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());
        }
            }        
      });
PM MAIL   Вверх
LSD
Дата 31.5.2016, 15:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15708
Регистрация: 24.3.2004

Репутация: 209
Всего: 537



Цитата(develjar @  31.5.2016,  13:27 Найти цитируемый пост)
Выдает ошибку в  строке  которую заменил

Исправь ошибку.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
develjar
Дата 31.5.2016, 16:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 27.5.2016

Репутация: нет
Всего: нет



Цитата(LSD @ 31.5.2016,  15:08)
Исправь ошибку.

try (Reader reader = new InputStreamReader(new FileInputStream(), "UTF-8"))

файл должен указываться вручную .

Это сообщение отредактировал(а) develjar - 31.5.2016, 16:54
PM MAIL   Вверх
SVN74
Дата 31.5.2016, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 5.5.2008
Где: Комсомольск на Дн епре

Репутация: 1
Всего: 18



Цитата(develjar @  29.5.2016,  10:50 Найти цитируемый пост)
английские буквы отображаются нормально, а русский получаются символами, как сделать нормальную кодировку

Ничего не надо было менять, просто в вывод надо было добавить перекодировку, кодировку надо подбирать...
System.out.println(new String((new String(buffer)).getBytes("cp1251")));

Это сообщение отредактировал(а) SVN74 - 31.5.2016, 17:23
PM MAIL WWW   Вверх
develjar
Дата 31.5.2016, 19:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 27.5.2016

Репутация: нет
Всего: нет



Цитата(SVN74 @ 31.5.2016,  17:21)
Цитата(develjar @  29.5.2016,  10:50 Найти цитируемый пост)
Ничего не надо было менять


Тут проблема в том , что при выводе на консоль выводится нормально,  но в JTextArea, какую не ставь кодировку отображается все равно квадратами. По этому тут уже другой вопрос.

JTextArea tx = new JTextArea (30,50);
tx.read( new FileReader( f.getAbsolutePath() ), null );
PM MAIL   Вверх
SVN74
Дата 31.5.2016, 23:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 5.5.2008
Где: Комсомольск на Дн епре

Репутация: 1
Всего: 18



По видимому у вас кодировка файла "windows-1251", вот набросал для, работает с JTextArea...
Код

FileInputStream fis = new FileInputStream("my.txt");
InputStreamReader isr = new InputStreamReader(fis, "cp1251");
char[] c = new char[fis.available()];
int x = isr.read(c);
String str = new String(c,0,x);

PM MAIL WWW   Вверх
develjar
Дата 1.6.2016, 12:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 27.5.2016

Репутация: нет
Всего: нет



Цитата(SVN74 @ 31.5.2016,  23:31)
Код

FileInputStream fis = new FileInputStream("my.txt");
InputStreamReader isr = new InputStreamReader(fis, "cp1251");
char[] c = new char[fis.available()];
int x = isr.read(c);
String str = new String(c,0,x);

И в чем разница с этим кодом? 

Код:

            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());
        }
            }        
      });



PM MAIL   Вверх
LSD
Дата 1.6.2016, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15708
Регистрация: 24.3.2004

Репутация: 209
Всего: 537



Цитата(SVN74 @  31.5.2016,  18:21 Найти цитируемый пост)
System.out.println(new String((new String(buffer)).getBytes("cp1251")));

НИКОГДА так не делайте. Если у вас "кракозябры" в String, то исправлять надо метод которые читает данные из байтов, а не костылить строки.


develjar
1. Начни уже пользоваться тегами [Код], невозможно же читать.
2. Зачем ты вначале создаешь Reader reader, а потом упорно продолжаешь как и раньше tx.read(new FileReader(f.getAbsolutePath() ), null); ?


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
develjar
Дата 1.6.2016, 21:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 27.5.2016

Репутация: нет
Всего: нет



Цитата(LSD @ 1.6.2016,  17:27)
 Зачем ты вначале создаешь Reader reader, а потом упорно продолжаешь как и раньше tx.read(new FileReader(f.getAbsolutePath() ), null); ?

Это нашел в примере как сделать,оттуда скопировал, по этому ни чего не могу сказать  smile 
PM MAIL   Вверх
SVN74
Дата 1.6.2016, 22:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 5.5.2008
Где: Комсомольск на Дн епре

Репутация: 1
Всего: 18



Цитата(develjar @  1.6.2016,  12:56 Найти цитируемый пост)
Цитата(SVN74 @ 31.5.2016,  23:31)
FileInputStream fis = new FileInputStream("my.txt");
InputStreamReader isr = new InputStreamReader(fis, "cp1251");
char[] c = new char[fis.available()];
int x = isr.read©;
String str = new String(c,0,x);

И в чем разница с этим кодом? 

Разница в том, что это работает.... smile
Взят файл с соответствующей кодировкой для проверки 
Если добавить ...       tx.setText(str); , все отображается правильно...




Это сообщение отредактировал(а) SVN74 - 1.6.2016, 22:11
PM MAIL WWW   Вверх
develjar
Дата 2.6.2016, 12:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 27.5.2016

Репутация: нет
Всего: нет



Цитата(SVN74 @ 1.6.2016,  22:10)
все отображается правильно...

Да, правильно.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1441 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.