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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> проблема с кодировкой, при работе с InputStream 
:(
    Опции темы
4epT
Дата 20.4.2009, 23:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Добрый вечер! 
Ситуация такая ... пишу в файл строки, символы русские. Вот метод которые собственно и записывает:

Код

    public void writeListToFile(String fName) throws FileNotFoundException, IOException
    {
        File f = new File(fName);
        OutputStream out = new FileOutputStream(f);
        for(int i=0; i<list.size();i++)
        {
            byte[] bytes = list.get(i).toStringParse().getBytes("Cp1251");
            out.write(bytes);
            out.write((new String("|")).getBytes());
        }
        out.close();
    }


А вот метод который читает из файла:

Код

    public Vector<myModelHumans> readListFile(String fName) throws FileNotFoundException, IOException
    {
        Vector<myModelHumans> li = new Vector<myModelHumans>();
        File f = new File(fName);
        String str2 = "";
        InputStream in = new FileInputStream(f);
        StringBuilder sb = new StringBuilder();
        
        while(in.available()>0)
        {
            int tmp = in.read();
            sb.append((char)tmp);
        }
        String str = sb.toString();
        byte[] b = str.getBytes("Cp1251");
        String res = new String(b,"Cp1251");
        System.out.print(res);
        System.out.println();
        System.out.println(System.getProperty("file.encoding"));
        return li;
    }


Считывают иероглифы (( хотя в файле все записано нормально ....
Кто может подсказать что не так делаю ? 
PM MAIL   Вверх
can4ec
Дата 21.4.2009, 03:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



привет!

Ошибка  в чтении данных из файла. sb.append((char)tmp); В твоем случае получается что считаный байт просто скопируется в char.
Такому копированию соответствует кодировка ISO-8859-1 (которая один в один соответствует первым 256 значениям Unicode), а значит, можно считать, что этот код просто использует её (вместо той, в которой реально закодированы символы в оригинальных данных).
Как вариант предлагаю:

Код

int b;
ByteArrayOutputStream baos = new ByteArrayOutputStream();

while( (b=is.read())!=-1 ) {
   baos.write( b );
  }

String s = baos.toString();
s = baos.toString("Cp1251");


Так же лучше сделать чтобы считывал массив байт, а не по одному. При записи в ByteArrayOutputStream можно указать с какого байта считывать из массива.
Код

byte[] buffer = new byte[100];
        int count;
        ByteArrayOutputStream baos = new ByteArrayOutputStream();

        while ((count = is.read(buffer)) != -1)
        {
            baos.write(buffer, 0, count);
        }

        String s = baos.toString();
        s = baos.toString("Cp1251");


PM MAIL   Вверх
4epT
Дата 21.4.2009, 06:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Спасибо, все получилось!!! ))
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.0404 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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