| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C++ Builder > сохранение файлов в различных кодировках |
| Автор: artsb 4.1.2008, 00:26 |
| Не подскажите, как научить программу сохранять файлы в выбранной кодировке. Типа как у блокнота. Спасибо. |
| Автор: JackYF 4.1.2008, 00:34 |
Перекодировать в нужную кодировку, сохранить |
| Автор: artsb 4.1.2008, 12:43 |
Ну, до этого я сразу додумался. Больше интересует: КАК это сделать (перекодировать)? Может есть какие-нибудь библиотеки или алгоритмы? |
| Автор: Crut 4.1.2008, 14:00 | ||
Вот пример:
Но эта по клаве, а для стандартов - смотри таблицу. |
| Автор: JackYF 4.1.2008, 14:05 |
| Crut, ужас какой... перепиши хоть со строками, что ли. |
| Автор: Crut 4.1.2008, 14:36 |
| ??? |
| Автор: JackYF 4.1.2008, 14:44 | ||
не находишь, что этот код слишком избыточен и накосячить в нём - как пить дать? |
| Автор: Crut 4.1.2008, 14:53 | ||||
C коментами что-ли?
// эта по клаве, а так: void ch_shd(char &a){ a = a + 1; }
Добавлено через 2 минуты и 49 секунд извеняюсь, за вопрос - можем тормозит.... Добавлено через 3 минуты и 17 секунд (модем) |
| Автор: JackYF 4.1.2008, 15:00 |
причём тут комментарии? я говорю про то, что почему не юзается таблица перекодировки, а написано 60 строчек кода с захаркодеными символами? Идём дальше. Представь, что тебе нужно будет сделать перекодировку в другую кодировку. Что ты будешь делать? Напишешь ещё 60 строчек кода? а если в 10 кодировок? |
| Автор: artsb 4.1.2008, 16:30 |
| Crut я имел в виду не то, что ты написал. Я имею ввиду: как сделать чтобы сохранять файлы в кодировках, как у блокнота. Fazil6 можешь написать примерчик использования библиотеки? |
| Автор: 586 4.1.2008, 17:44 | ||
Вбей русскую раскладку в один массив, а английскую во второй (они должны быть одинаковой длины) и кодируй. |
| Автор: Fazil6 4.1.2008, 17:55 |
а я что написал? http://forum.vingrad.ru/topic-181795/hl/iconv/index.html |
| Автор: artsb 4.1.2008, 19:39 |
| Fazil6, я просто не совсем понял приведённый тобой пример. Можешь как-то подробнее объяснить и на конкретном примере, плиз. И ещё вопрос: где взять таблицы кодировок и как ими пользоваться? Спасибо. |
| Автор: Fazil6 4.1.2008, 20:10 | ||
пример конкретнейший. конкретней не придумаешь. что непонятно? |
| Автор: s1lver 4.1.2008, 20:11 | ||
В библиотеке iconv, только я сам хочу узнать как её кстановить, простым переносом файла в папку инклуд не выходит. |
| Автор: Fazil6 4.1.2008, 20:18 | ||
какого файла? Зачем вообще куда-то что-то переносить. Все что нужно - прописать путь к хедеру, путь к lib и подключить либу в список линкеру в проекте |
| Автор: s1lver 4.1.2008, 20:25 | ||||
так там куча файлов в архиве, какую папку прописывать непонятно. Вот я и нашел iconv.hpp и кинул в папку include |
| Автор: Fazil6 4.1.2008, 20:31 | ||
ну естественно, обычно ведь в архиве только один файл имеет значение. Остальные - так, для придания веса и солидности. Особенно всякие там readme и install |
| Автор: artsb 4.1.2008, 20:35 |
что-то там много всего написано. можешь просто написать: какой функцией, откуда и куда конвертировать. А лучше, подскажи, где таблицы кодов взять. Спасибо. |
| Автор: Fazil6 4.1.2008, 21:17 | ||||||
может быть стоит напрячься? 30 строк кода не так уж много.
это обертка для вызова непосредственно функций iconv. Включает в себя 2 функции, одна вызывает другую.
неужели из этого примера непонятно
??? Добавлено через 7 минут и 24 секунды а зачем тебе? Неужели читать документацию дольше и сложнее чем писать велосипеды. Сконвертировать из одной кодировки в другую не такая уж тривиальная задача в общем виде. Хотябы потому, что символы в разных кодировках имеют неодинаковую длину. Если так уж хочешь узнать какой функцией куда, то открой iconv.h и посмотри. Там всег-то 5 функций. Причем в коментах подробно описаны все. |
| Автор: artsb 4.1.2008, 21:31 |
| Fazil6, спасибо. |
| Автор: artsb 5.1.2008, 13:16 |
| Fazil6 почему-то нету в архиве ни iconv.hpp, ни iconv.h. Где их взять? |
| Автор: artsb 5.1.2008, 13:43 |
А у Билдера, оказывается, есть свои средства. Вот, из справки:![]() Мне этого хватит, нужно только разобраться. И всётаки, почему нет в архиве ни iconv.hpp, ни iconv.h. |
| Автор: s1lver 5.1.2008, 17:05 | ||
В архиве как раз и есть эти файлы, но вот как поставить чтобы все работало я что-то не врубился. |
| Автор: artsb 5.1.2008, 17:57 |
| Да нет там этих файлов. Всё перерыл, поиск юзал. Нет их там. s1lver если можешь, выложи свой архив. Устанавливается, вроде, так: Меню Tools->Environment Options, на вкладке Library, жмёшь кнопку с тремя точками, напротив Library path, и добавляешь путь к папке с библиотекой. Вот, вроде, и всё. |
| Автор: s1lver 6.1.2008, 16:45 | ||
Понятное дело. Только к какой папки прописывать? бериhttp://junpolit.narod.ru/libiconv-1.11.tar |
| Автор: artsb 6.1.2008, 17:20 |
Пишет: "Нет такой страницы". Кстати у меня этот же архив - libiconv-1.11.tar Странно, почему там нет этих файлов. Ладно, не парься. Спасибо. Пропиши к общей папке. Билдер сам найдёт. |
| Автор: s1lver 6.1.2008, 17:26 | ||
Усе правильно. Там ведь архив, я был уверен,что все нормально, тк. использую Download Master он все благополучно скачивает.
|
| Автор: artsb 6.1.2008, 20:04 |
| DownloadMaster не может закачать. Пишет ошибка. Ну да ладно. А в каком каталоге у тебя лежит iconv.hpp? |
| Автор: s1lver 7.1.2008, 00:48 |
Lib. Вот я прикрепил файл iconv. |
| Автор: artsb 7.1.2008, 12:21 |
| iconv.c у меня есть. Но Fazil6 в своём примере подключал iconv.h, которого у меня нет. Fazil6 разъясни ситуацию, плиз. И ещё возник вопрос: Содержимое файла, при его открытии, я помещаю в memo. Если открываю файл, сохранённый в кодировке ANSI, то всё нормально. Но если файл был сохранён в другой кодировке (например, UTF-8), то в memo появляются всякие закорючки. Следовательно, нужно файл, при открытии, перевести в ANSI. Но как узнать в какой кодировке был сохранён открываемый файл? |
| Автор: Fazil6 7.1.2008, 13:33 |
| ссылка на библиотеку это в исходных кодах. Это нужно собирать. Как собирать описано в файле Install.generic и прочих readme могу скинуть на мыло собраную версию 1.9 для Win32. Если что - PM |
| Автор: s1lver 9.1.2008, 09:33 | ||||
На мой взгляд можно просто преобразовывать файлы при открытии из UTF-8 в ANSI, без выявления кодировки...... Вот попробовал примерчик.
Ошибки: [C++ Error] Unit1.cpp(26): E2316 'string' is not a member of 'std' [C++ Error] Unit1.cpp(26): E2379 Statement missing ; Может я что-то не так понял? Что надопоместить в namespace UTF8CONVERTER{}? |
| Автор: artsb 9.1.2008, 20:35 | ||
Если он уже был в ANSI, то получатся закорючки. Fazil6 говорит, что распознать не получится. Можно просто сделать меню с выбором кодировки. s1lver а откуда у тебя iconv.h? |
| Автор: s1lver 9.1.2008, 20:42 | ||
Мне Fazil6 скинул на мыло.
а у тебя уже есть работающий код? |
| Автор: artsb 9.1.2008, 21:02 |
Да нет, я решил обойтись встроенными средствами. А библитеку просто так взял. Всё равно пригодится. |
| Автор: s1lver 9.1.2008, 21:28 |
??? можешь подсказать? |
| Автор: artsb 9.1.2008, 21:56 |
Дык я ж ранее скриншот из хэлпа кидал. В хэлпе пиши "Character set conversions". А там разберёшься. Я сам ещё толком не разбирался. Пока другим занят. |
| Автор: s1lver 20.1.2008, 15:18 | ||
нарыл тут один примерчик, сейчас буду пробовать
|
| Автор: artsb 20.1.2008, 20:02 |
Молодец. Пригодится... |
| Автор: KTatsu 25.11.2008, 04:46 | ||
| Прошу простить за "некропостерство", но вопрос все еще в силе - как собрать библиотеку? Ридми и инсталл я нашел, но толком ничего не понял из их содержания. И тоже не совсем понял данный код:
|
| Автор: Infector 15.3.2009, 15:12 |
| А можно еще вопрос небольшой: нужно кодировку ДОС перегнать в Ansi, соответственно пишу код: for (int i=1; i<Memo2->Lines->Count; i++) { Memo1->Lines->Add(Utf8ToAnsi(Memo2->Lines->Strings[i])); } В результате все запускается, но вместо преобразования кодировки получаю удаление строк с русскоязычными символами |
| Автор: xvr 16.3.2009, 19:46 |
| ДОС - это не UTF8! |
| Автор: dumb 16.3.2009, 19:55 |
| Infector, http://msdn.microsoft.com/en-us/library/ms647493(VS.85).aspx |