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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> народ, а как писать в файл в разных кодировках? народ, а как писать в файл в разных коди 
V
    Опции темы
nas_alex
Дата 6.12.2004, 19:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



нужно писать в файл в кодировке DOS|WIN .
как это сделать?
PM MAIL   Вверх
Sleepy_PIP
Дата 6.12.2004, 21:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



смотри OutputStreamWriter - там есть чарсет.
А вот как писать в смешанной кодировке - с ходу и не знаю smile. Полазил по докам - похоже Sun считает что это не нужно, а? smile


--------------------
--
Sleepy_PIP. Pavel Pryazhentsev (ex. 2:5020/141) "... Лучше быть нужным, чем
свободным ..."
PM MAIL ICQ   Вверх
LSD
Дата 6.12.2004, 21:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


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

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



Можно так: открыл-записал-закрыл, сменил кодировку-дописал.


--------------------
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   Вверх
Sleepy_PIP
Дата 6.12.2004, 21:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(LSD @ 6.12.2004, 21:24)
Можно так: открыл-записал-закрыл, сменил кодировку-дописал.

просто великолепно!
А представь что ф. на сетке, что чередование чуть-ли не через 10 байт, что надо возвращаться и дописывать?
не, я сам не знаю - поэтому так-же интересно.


--------------------
--
Sleepy_PIP. Pavel Pryazhentsev (ex. 2:5020/141) "... Лучше быть нужным, чем
свободным ..."
PM MAIL ICQ   Вверх
LSD
Дата 6.12.2004, 21:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


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

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



Есть еще вариант: кодировать строку в массив байт, например: Sting.getBytes(<кодировка>) и писать непосредственно их.


--------------------
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   Вверх
nas_alex
Дата 6.12.2004, 22:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



а можно какой-нибудь примерчик ????
PM MAIL   Вверх
LSD
Дата 6.12.2004, 22:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


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

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



Код

FileOutputStream out = new FileOutputStream("multiencodedfile.txt");
out.write("Строка в CP1251\n".getBytes("CP1251"));
out.write("Строка в UTF-8\n".getBytes("UTF-8"));
out.close();



--------------------
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   Вверх
AntonSaburov
Дата 7.12.2004, 15:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


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

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



Писать в разных кодировках в файл - вопрос сам по себе не корректен.

Фактически кодировка обозначает какого вида символ заменяет то значене байта, которое храниться в файле. Его можно читать как одной кодировкой, так и другой. Совершенно по барабану.


LSD похоже предложил лучшую идею - перед куском записывать значение кодировки и при считывании это значение учитывать.
PM MAIL WWW ICQ   Вверх
nas_alex
Дата 7.12.2004, 19:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



получилось, спасибо.

Код

FileOutputStream out = new FileOutputStream("multiencodedfile.txt");
out.write("Строка в CP866\n".getBytes("CP866"));
out.close();


вот только маленькая проблемка: перевод строки (\n) в CP866 имеет HEX-код 0A

а надо чтоб был 0D 0A
как это сделать?
PM MAIL   Вверх
AntonSaburov
Дата 7.12.2004, 21:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


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

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



Значит перед тем как писать в этой кодировке надо предусмотреть, чтобы писалось так - заменять то бишь, ручками, честно.
PM MAIL WWW ICQ   Вверх
igon
Дата 7.12.2004, 23:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



HEX-код 0A '\n' - это newline или Перевод строки
HEX-код 0D '\r' - это carriage return или Возврат каретки.
Это два разных действия, их коды стандартны для всех кодировок, поскольку относятся они к служебным символам.
Поэтому можно писать
Код

out.write("Строка в любая_кодировка\n\r".getBytes("любая_кодировка"));

или
Код

out.write("Строка в любая_кодировка\r\n".getBytes("любая_кодировка"));

- и честно, и ручкам отдохнуть можно smile
Возврат каретки '\r' как самостоятельное действие сейчас уже не используется и актуален только для DOS приложений.
Однако если текстовый процессор интерпретирует '\r' как '\n' - он будет добавлять лишнюю пустую строку.

Цитата
LSD похоже предложил лучшую идею - перед куском записывать значение кодировки и при считывании это значение учитывать.


Идея LSD действительно верная, но я не совсем согласен с комментарием:
значение кодировки записывать и учитывать незачем (да она и не записывается в выходной поток). Когда на экран цепочка байтов "D1 F2 F0 EE EA E0" отображается в читаемом виде("Строка") - это потому, что текущая кодировка приложения - Win1251. При смене кодировки увидим абракадабру, хотя сама цепочка байтов не изменится. А вот когда в

Код

"Строка".getBytes("CP866")


указываем другую кодировку, будет меняться именно цепочка байтов и в этом измененном виде она и будет записана в файл. В файле при этом никакой информации о кодировке НЕ БУДЕТ!

Прошу извинить меня за многословие, но вот написал - и самому понятнее стало smile



--------------------
Хотите поговорить об этом?
PM   Вверх
nas_alex
Дата 8.12.2004, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



спасибо за помощь. smile
PM MAIL   Вверх
Bulat
Дата 30.11.2006, 11:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

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



Смысл тот же, только случай наоборот, из файла

есть код у меня 
Код


    static final String ENCODING = "koi8-r";
...
                    java.io.BufferedReader reader = null;
                    try {
                        reader = new java.io.BufferedReader(new java.io.InputStreamReader(new java.io.FileInputStream("C:/..../Queryes/" + name), ENCODING));
                        java.util.ArrayList<String> list = new java.util.ArrayList<String>();
                        while(reader.ready())
                            list.add(reader.readLine());
                        reader.close();

                        for(String line : list)
                            query = line;
                    } catch (java.io.FileNotFoundException e) {
                        javax.swing.JOptionPane.showMessageDialog(this, e, "Ошибка", javax.swing.JOptionPane.ERROR_MESSAGE);
                    } catch (java.io.IOException e) {
                        javax.swing.JOptionPane.showMessageDialog(this, e, "Ошибка", javax.swing.JOptionPane.ERROR_MESSAGE);
                    }



раньше вообще ENCODING не дописывал, но и это не помогает нормально считывать из файла русские буквы.

Есть вариант конечно переколбасить строку

Код

                        reader = new java.io.BufferedReader(new java.io.InputStreamReader(new java.io.FileInputStream("C:/..../Queryes/" + name), ENCODING));


но что тогда вместо этого лучше использовать?

Или может как-то считывать побайтово типа getBytes......

Вообщем мыслей много, но как реализовать лучше в раздумьях???


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
LSD
Дата 30.11.2006, 11:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


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

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



Цитата(Bulat @  30.11.2006,  11:37 Найти цитируемый пост)
Вообщем мыслей много, но как реализовать лучше в раздумьях???

Это конечно хорошо, но хетелось бы четко услышать в чем проблема? Ошибки, русский текст читается неккоретно или еще что?


--------------------
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   Вверх
Bulat
Дата 30.11.2006, 12:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

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



LSD, сорри, я разобрался, тут совсем не в этом дело было, просто внимательности в одной мелочи самому не хватило smile 


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

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

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


 




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


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

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