Поиск:

Ответ в темуСоздание новой темы Создание опроса
> сохранение файлов в различных кодировках 
:(
    Опции темы
artsb
Дата 4.1.2008, 00:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

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



Не подскажите, как научить программу сохранять файлы в выбранной кодировке. Типа как у блокнота. Спасибо.


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
JackYF
Дата 4.1.2008, 00:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

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



Цитата(artsb @  4.1.2008,  00:26 Найти цитируемый пост)
сохранять файлы в выбранной кодировке.

Перекодировать в нужную кодировку, сохранить smile


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
artsb
Дата 4.1.2008, 12:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

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



Цитата(JackYF @  4.1.2008,  00:34 Найти цитируемый пост)
Перекодировать в нужную кодировку, сохранить  smile 

Ну, до этого я сразу додумался.  smile 
Больше интересует: КАК это сделать (перекодировать)? Может есть какие-нибудь библиотеки или алгоритмы?


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
Fazil6
Дата 4.1.2008, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(artsb @  4.1.2008,  11:43 Найти цитируемый пост)
Больше интересует: КАК это сделать (перекодировать)? Может есть какие-нибудь библиотеки или алгоритмы?

библиотека iconv

Добавлено через 2 минуты и 44 секунды
конвертация
PM MAIL   Вверх
Crut
Дата 4.1.2008, 14:00 (ссылка)   | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
*


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

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



Вот пример:
Код

typedef AnsiString as;
void code_line(as &g){
  for(int a=0; a < StrLen(g.c_str()); a++){
   ch_shd(g[a]);
 }
}

void ch_shd(char &a){
 char ret;
 switch(a){
 //русский
 //верх. строка
  case 'й': ret = 'q';break;
  case 'ц': ret = 'w';break;
  case 'у': ret = 'e';break;
  case 'к': ret = 'r';break;
  case 'е': ret = 't';break;
  case 'н': ret = 'y';break;
  case 'г': ret = 'u';break;
  case 'ш': ret = 'i';break;
  case 'щ': ret = 'o';break;
  case 'з': ret = 'p';break;
  case 'х': ret = '[';break;
  case 'ъ': ret = ']';break;
 //ср. строка
  case 'ф': ret = 'a';break;
  case 'ы': ret = 's';break;
  case 'в': ret = 'd';break;
  case 'а': ret = 'f';break;
  case 'п': ret = 'g';break;
  case 'р': ret = 'h';break;
  case 'о': ret = 'j';break;
  case 'л': ret = 'k';break;
  case 'д': ret = 'l';break;
  case 'ж': ret = ';';break;
  case 'э': ret = '\'';break;
  //нижн. строка
  case 'я': ret = 'z';break;
  case 'ч': ret = 'x';break;
  case 'с': ret = 'c';break;
  case 'м': ret = 'v';break;
  case 'и': ret = 'b';break;
  case 'т': ret = 'n';break;
  case 'ь': ret = 'm';break;
  case 'б': ret = ',';break;
  case 'ю': ret = '.';break;
  case '.': ret = '/';break;
  //английский
  //верх.строка
  case 'q': ret = 'й';break;
  case 'w': ret = 'ц';break;
  case 'e': ret = 'у';break;
  case 'r': ret = 'к';break;
  case 't': ret = 'е';break;
  case 'y': ret = 'н';break;
  case 'u': ret = 'г';break;
  case 'i': ret = 'ш';break;
  case 'o': ret = 'щ';break;
  case 'p': ret = 'з';break;
  case '[': ret = 'х';break;
  case ']': ret = 'ъ';break;
    //ср. строка
  case 'a': ret = 'ф';break;
  case 's': ret = 'ы';break;
  case 'd': ret = 'в';break;
  case 'f': ret = 'а';break;
  case 'g': ret = 'п';break;
  case 'h': ret = 'р';break;
  case 'j': ret = 'о';break;
  case 'k': ret = 'л';break;
  case 'l': ret = 'д';break;
  case ';': ret = 'ж';break;
  case '\'': ret = 'э';break;
      //нижн. строка
  case 'z': ret = 'я';break;
  case 'x': ret = 'ч';break;
  case 'c': ret = 'с';break;
  case 'v': ret = 'м';break;
  case 'b': ret = 'и';break;
  case 'n': ret = 'т';break;
  case 'm': ret = 'ь';break;
  case ',': ret = 'б';break;
  case '/': ret = '.';break;
  default: ret = a;
 }
 a = ret;
}

Но эта по клаве, а для стандартов -  смотри таблицу.
PM MAIL   Вверх
JackYF
Дата 4.1.2008, 14:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

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



Crut, ужас какой... перепиши хоть со строками, что ли.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Crut
Дата 4.1.2008, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
*


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

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



??? 
PM MAIL   Вверх
JackYF
Дата 4.1.2008, 14:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

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



Цитата(Crut @  4.1.2008,  14:00 Найти цитируемый пост)
case 'й': ret = 'q';break;
  case 'ц': ret = 'w';break;
  case 'у': ret = 'e';break;
  case 'к': ret = 'r';break;
  case 'е': ret = 't';break;
  case 'н': ret = 'y';break;
  case 'г': ret = 'u';break;
  case 'ш': ret = 'i';break;
  case 'щ': ret = 'o';break;
  case 'з': ret = 'p';break;
  case 'х': ret = '[';break;
  case 'ъ': ret = ']';break;
 //ср. строка
  case 'ф': ret = 'a';break;
  case 'ы': ret = 's';break;
  case 'в': ret = 'd';break;
  case 'а': ret = 'f';break;
  case 'п': ret = 'g';break;
  case 'р': ret = 'h';break;
  case 'о': ret = 'j';break;
  case 'л': ret = 'k';break;
  case 'д': ret = 'l';break;
  case 'ж': ret = ';';break;
  case 'э': ret = '\'';break;
  //нижн. строка
  case 'я': ret = 'z';break;
  case 'ч': ret = 'x';break;
  case 'с': ret = 'c';break;
  case 'м': ret = 'v';break;
  case 'и': ret = 'b';break;
  case 'т': ret = 'n';break;
  case 'ь': ret = 'm';break;
  case 'б': ret = ',';break;
  case 'ю': ret = '.';break;
  case '.': ret = '/';break;
  //английский
  //верх.строка
  case 'q': ret = 'й';break;
  case 'w': ret = 'ц';break;
  case 'e': ret = 'у';break;
  case 'r': ret = 'к';break;
  case 't': ret = 'е';break;
  case 'y': ret = 'н';break;
  case 'u': ret = 'г';break;
  case 'i': ret = 'ш';break;
  case 'o': ret = 'щ';break;
  case 'p': ret = 'з';break;
  case '[': ret = 'х';break;
  case ']': ret = 'ъ';break;
    //ср. строка
  case 'a': ret = 'ф';break;
  case 's': ret = 'ы';break;
  case 'd': ret = 'в';break;
  case 'f': ret = 'а';break;
  case 'g': ret = 'п';break;
  case 'h': ret = 'р';break;
  case 'j': ret = 'о';break;
  case 'k': ret = 'л';break;
  case 'l': ret = 'д';break;
  case ';': ret = 'ж';break;
  case '\'': ret = 'э';break;
      //нижн. строка
  case 'z': ret = 'я';break;
  case 'x': ret = 'ч';break;
  case 'c': ret = 'с';break;
  case 'v': ret = 'м';break;
  case 'b': ret = 'и';break;
  case 'n': ret = 'т';break;
  case 'm': ret = 'ь';break;
  case ',': ret = 'б';break;
  case '/': ret = '.';break;

не находишь, что этот код слишком избыточен и накосячить в нём - как пить дать?



--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Crut
Дата 4.1.2008, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
*


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

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



C коментами что-ли?
Код

typedef AnsiString as;    //ансистринг переминовываем
void code_line(as &g){ // функция конирующая целую строку ансистринга    
  for(int a=0; a < StrLen(g.c_str()); a++){    //тута всё ясно
   ch_shd(g[a]);    //кодируем
 }    
}    
void ch_shd(char &a){     // функция коодинга
 char ret;    //то, чё возратить
 switch(a){    //ветвление
 //русский    
 //верх. строка    
  case 'й': ret = 'q';break; //тута ясно    
  case 'ц': ret = 'w';break;    
  case 'у': ret = 'e';break;    
  case 'к': ret = 'r';break;    
  case 'е': ret = 't';break;    
  case 'н': ret = 'y';break;    
  case 'г': ret = 'u';break;    
  case 'ш': ret = 'i';break;    
  case 'щ': ret = 'o';break;    
  case 'з': ret = 'p';break;    
  case 'х': ret = '[';break;    
  case 'ъ': ret = ']';break;    
 //ср. строка    
  case 'ф': ret = 'a';break;    
  case 'ы': ret = 's';break;    
  case 'в': ret = 'd';break;    
  case 'а': ret = 'f';break;    
  case 'п': ret = 'g';break;    
  case 'р': ret = 'h';break;    
  case 'о': ret = 'j';break;    
  case 'л': ret = 'k';break;    
  case 'д': ret = 'l';break;    
  case 'ж': ret = ';';break;    
  case 'э': ret = '\'';break;    
  //нижн. строка    
  case 'я': ret = 'z';break;    
  case 'ч': ret = 'x';break;    
  case 'с': ret = 'c';break;    
  case 'м': ret = 'v';break;    
  case 'и': ret = 'b';break;    
  case 'т': ret = 'n';break;    
  case 'ь': ret = 'm';break;    
  case 'б': ret = ',';break;    
  case 'ю': ret = '.';break;    
  case '.': ret = '/';break;    
  //английский    
  //верх.строка    
  case 'q': ret = 'й';break;    
  case 'w': ret = 'ц';break;    
  case 'e': ret = 'у';break;    
  case 'r': ret = 'к';break;    
  case 't': ret = 'е';break;    
  case 'y': ret = 'н';break;    
  case 'u': ret = 'г';break;    
  case 'i': ret = 'ш';break;    
  case 'o': ret = 'щ';break;    
  case 'p': ret = 'з';break;    
  case '[': ret = 'х';break;    
  case ']': ret = 'ъ';break;    
    //ср. строка    
  case 'a': ret = 'ф';break;    
  case 's': ret = 'ы';break;    
  case 'd': ret = 'в';break;    
  case 'f': ret = 'а';break;    
  case 'g': ret = 'п';break;    
  case 'h': ret = 'р';break;    
  case 'j': ret = 'о';break;    
  case 'k': ret = 'л';break;    
  case 'l': ret = 'д';break;    
  case ';': ret = 'ж';break;    
  case '\'': ret = 'э';break;    
      //нижн. строка    
  case 'z': ret = 'я';break;    
  case 'x': ret = 'ч';break;    
  case 'c': ret = 'с';break;    
  case 'v': ret = 'м';break;    
  case 'b': ret = 'и';break;    
  case 'n': ret = 'т';break;    
  case 'm': ret = 'ь';break;    
  case ',': ret = 'б';break;    
  case '/': ret = '.';break;    
  default: ret = a; //если не подходит - копировать как есть    
 }    
 a = ret; //присваиваем
}

// эта по клаве, а так:
 void ch_shd(char &a){
 a = a + 1;
}
Код




Добавлено через 2 минуты и 49 секунд
извеняюсь, за вопрос - можем тормозит....

Добавлено через 3 минуты и 17 секунд
(модем)
PM MAIL   Вверх
JackYF
Дата 4.1.2008, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

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



Цитата(Crut @  4.1.2008,  14:53 Найти цитируемый пост)
C коментами что-ли?

причём тут комментарии? я говорю про то, что почему не юзается таблица перекодировки, а написано 60 строчек кода с захаркодеными символами?

Идём дальше. Представь, что тебе нужно будет сделать перекодировку в другую кодировку. Что ты будешь делать? Напишешь ещё 60 строчек кода? а если в 10 кодировок?


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
artsb
Дата 4.1.2008, 16:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

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



Crut я имел в виду не то, что ты написал. Я имею ввиду: как сделать чтобы сохранять файлы в кодировках, как у блокнота.

Fazil6 можешь написать примерчик использования библиотеки?


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
586
Дата 4.1.2008, 17:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

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



Цитата(Crut @  4.1.2008,  14:53 Найти цитируемый пост)
void ch_shd(char &a){     // функция коодинга
 char ret;    //то, чё возратить
 switch(a){    //ветвление
 //русский    
 //верх. строка    
  case 'й': ret = 'q';break; //тута ясно    
  case 'ц': ret = 'w';break;    
  case 'у': ret = 'e';break;    
  case 'к': ret = 'r';break;    
........
  case ',': ret = 'б';break;    
  case '/': ret = '.';break;    
  default: ret = a; //если не подходит - копировать как есть    
 }    
 a = ret; //присваиваем

Вбей русскую раскладку в один массив, а английскую во второй (они должны быть одинаковой длины)  и кодируй.
PM   Вверх
Fazil6
Дата 4.1.2008, 17:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(artsb @  4.1.2008,  15:30 Найти цитируемый пост)
Fazil6 можешь написать примерчик использования библиотеки?

а я что написал? 
конвертация

PM MAIL   Вверх
artsb
Дата 4.1.2008, 19:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

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



Fazil6, я просто не совсем понял приведённый тобой пример. Можешь как-то подробнее объяснить и на конкретном примере, плиз.
И ещё вопрос: где взять таблицы кодировок и как ими пользоваться?
Спасибо.


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
Fazil6
Дата 4.1.2008, 20:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(artsb @  4.1.2008,  18:39 Найти цитируемый пост)
Fazil6, я просто не совсем понял приведённый тобой пример. Можешь как-то подробнее объяснить и на конкретном примере, плиз.

пример конкретнейший. конкретней не придумаешь.
что непонятно?
PM MAIL   Вверх
s1lver
Дата 4.1.2008, 20:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(artsb @ 4.1.2008,  19:39)
 где взять таблицы кодировок и как ими пользоваться?

В библиотеке iconv, только я сам хочу узнать как её кстановить, простым переносом файла в папку инклуд не выходит. smile 


--------------------
Я собрался жить вечно - пока все идет нормально!
PM MAIL ICQ   Вверх
Fazil6
Дата 4.1.2008, 20:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(s1lver @  4.1.2008,  19:11 Найти цитируемый пост)
В библиотеке iconv, только я сам хочу узнать как её кстановить, простым переносом файла в папку инклуд не выходит

какого файла? 
Зачем вообще куда-то что-то переносить. Все что нужно - прописать путь к хедеру, путь к lib и подключить либу в список линкеру в проекте
PM MAIL   Вверх
s1lver
Дата 4.1.2008, 20:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Fazil6 @ 4.1.2008,  20:18)
Цитата(s1lver @  4.1.2008,  19:11 Найти цитируемый пост)
В библиотеке iconv, только я сам хочу узнать как её кстановить, простым переносом файла в папку инклуд не выходит

какого файла? 
Зачем вообще куда-то что-то переносить. Все что нужно - прописать путь к хедеру, путь к lib и подключить либу в список линкеру в проекте

так там куча файлов в архиве, какую папку прописывать непонятно. Вот я и нашел iconv.hpp и кинул в папку include


--------------------
Я собрался жить вечно - пока все идет нормально!
PM MAIL ICQ   Вверх
Fazil6
Дата 4.1.2008, 20:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(s1lver @  4.1.2008,  19:25 Найти цитируемый пост)
так там куча файлов в архиве, какую папку прописывать непонятно. Вот я и нашел iconv.hpp и кинул в папку include

ну естественно, обычно ведь в архиве только один файл имеет значение. Остальные - так, для придания веса и солидности. Особенно всякие там readme и install
PM MAIL   Вверх
artsb
Дата 4.1.2008, 20:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

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



Цитата(Fazil6 @  4.1.2008,  20:10 Найти цитируемый пост)
что непонятно? 

что-то там много всего написано.  smile 
можешь просто написать: какой функцией, откуда и куда конвертировать.
А лучше, подскажи, где таблицы кодов взять.
Спасибо.


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
Fazil6
Дата 4.1.2008, 21:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(artsb @  4.1.2008,  19:35 Найти цитируемый пост)
что-то там много всего написано. 

может быть стоит напрячься? 30 строк кода не так уж много. 
Код

namespace UTF8CONVERTER

это обертка для вызова непосредственно функций iconv. Включает в себя 2 функции, одна вызывает другую.

Код

std::string CONVERTER::UTF8ToWin1251(const std::string &val)
{
    return UTF8CONVERTER::conv( "windows-1251", "UTF-8", val);
}

std::string CONVERTER::Win1251ToUTF8(const std::string &val)
{
    return UTF8CONVERTER::conv("UTF-8", "windows-1251", val);    

}

неужели из этого примера непонятно 
Цитата

какой функцией, откуда и куда конвертировать

???

Добавлено через 7 минут и 24 секунды
Цитата(artsb @  4.1.2008,  19:35 Найти цитируемый пост)
А лучше, подскажи, где таблицы кодов взять.Спасибо.

а зачем тебе? Неужели читать документацию дольше и сложнее чем писать велосипеды. Сконвертировать из одной кодировки в другую не такая уж тривиальная задача в общем виде. Хотябы потому, что символы в разных кодировках имеют неодинаковую длину.

Если так уж хочешь узнать какой функцией куда, то открой iconv.h и посмотри. Там всег-то 5 функций. Причем в коментах подробно описаны все.
PM MAIL   Вверх
artsb
Дата 4.1.2008, 21:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

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



Fazil6, спасибо.


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
artsb
Дата 5.1.2008, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

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



Fazil6
почему-то нету в архиве ни iconv.hpp, ни iconv.h. Где их взять?


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
artsb
Дата 5.1.2008, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

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



А у Билдера, оказывается, есть свои средства. Вот, из справки:
user posted image
Мне этого хватит, нужно только разобраться. smile
И всётаки, почему нет в архиве ни iconv.hpp, ни iconv.h.


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
s1lver
Дата 5.1.2008, 17:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(artsb @ 5.1.2008,  13:16)
Fazil6
почему-то нету в архиве ни iconv.hpp, ни iconv.h. Где их взять?

В архиве как раз и есть эти файлы, но вот как поставить чтобы все работало я что-то не врубился. smile 

Это сообщение отредактировал(а) s1lver - 5.1.2008, 17:05


--------------------
Я собрался жить вечно - пока все идет нормально!
PM MAIL ICQ   Вверх
artsb
Дата 5.1.2008, 17:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

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



Да нет там этих файлов. Всё перерыл, поиск юзал. Нет их там.

s1lver если можешь, выложи свой архив.
Устанавливается, вроде, так:
Меню Tools->Environment Options,
на вкладке Library,
жмёшь кнопку с тремя точками, напротив Library path, и добавляешь путь к папке с библиотекой.
Вот, вроде, и всё.


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
s1lver
Дата 6.1.2008, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(artsb @  5.1.2008,  17:57 Найти цитируемый пост)
Устанавливается, вроде, так:
Меню Tools->Environment Options,
на вкладке Library,
жмёшь кнопку с тремя точками, напротив Library path, и добавляешь путь к папке с библиотекой.
Вот, вроде, и всё. 


Понятное дело. Только к какой папки прописывать?


Цитата(artsb @  5.1.2008,  17:57 Найти цитируемый пост)
s1lver если можешь, выложи свой архив.


бериlibiconv-1.11.tar


--------------------
Я собрался жить вечно - пока все идет нормально!
PM MAIL ICQ   Вверх
artsb
Дата 6.1.2008, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

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



Цитата(s1lver @  6.1.2008,  16:45 Найти цитируемый пост)
бериlibiconv-1.11.tar

Пишет: "Нет такой страницы".
Кстати у меня этот же архив - libiconv-1.11.tar
Странно, почему там нет этих файлов.
Ладно, не парься. Спасибо.

Цитата(s1lver @  6.1.2008,  16:45 Найти цитируемый пост)
Только к какой папки прописывать?

Пропиши к общей папке. Билдер сам найдёт. smile

Это сообщение отредактировал(а) artsb - 6.1.2008, 17:25


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
s1lver
Дата 6.1.2008, 17:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(artsb @  6.1.2008,  17:20 Найти цитируемый пост)
Пишет: "Нет такой страницы".

Усе правильно. Там ведь архив, я был уверен,что все нормально, тк. использую Download Master он все благополучно скачивает.
Цитата

Пропиши к общей папке. Билдер сам найдёт.
 Сейчас попробую

Это сообщение отредактировал(а) s1lver - 6.1.2008, 17:28


--------------------
Я собрался жить вечно - пока все идет нормально!
PM MAIL ICQ   Вверх
artsb
Дата 6.1.2008, 20:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

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



DownloadMaster не может закачать. Пишет ошибка. Ну да ладно.
А в каком каталоге у тебя лежит iconv.hpp?


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
s1lver
Дата 7.1.2008, 00:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(artsb @  6.1.2008,  20:04 Найти цитируемый пост)
А в каком каталоге у тебя лежит iconv.hpp? 


Lib. Вот я прикрепил файл iconv.

Присоединённый файл ( Кол-во скачиваний: 9 )
Присоединённый файл  iconv.c 19,30 Kb


--------------------
Я собрался жить вечно - пока все идет нормально!
PM MAIL ICQ   Вверх
artsb
Дата 7.1.2008, 12:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

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



iconv.c у меня есть. Но Fazil6 в своём примере подключал iconv.h, которого у меня нет.
Fazil6 разъясни ситуацию, плиз.

И ещё возник вопрос:
Содержимое файла, при его открытии, я помещаю в memo.
Если открываю файл, сохранённый в кодировке ANSI, то всё нормально. Но если файл был сохранён в другой кодировке (например, UTF-8), то в memo появляются всякие закорючки. Следовательно, нужно файл, при открытии, перевести в ANSI. Но как узнать в какой кодировке был сохранён открываемый файл?

Это сообщение отредактировал(а) artsb - 7.1.2008, 12:22


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
Fazil6
Дата 7.1.2008, 13:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



ссылка на библиотеку 
Цитата(s1lver @  6.1.2008,  15:45 Найти цитируемый пост)
бериlibiconv-1.11.tar

 это в исходных кодах. Это нужно собирать. Как собирать описано в файле 
Install.generic и прочих readme

могу скинуть на мыло собраную версию 1.9 для Win32. Если что - PM

Это сообщение отредактировал(а) Fazil6 - 7.1.2008, 13:34
PM MAIL   Вверх
s1lver
Дата 9.1.2008, 09:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(artsb @  7.1.2008,  12:21 Найти цитируемый пост)
Если открываю файл, сохранённый в кодировке ANSI, то всё нормально. Но если файл был сохранён в другой кодировке (например, UTF-8), то в memo появляются всякие закорючки. Следовательно, нужно файл, при открытии, перевести в ANSI. Но как узнать в какой кодировке был сохранён открываемый файл?


На мой взгляд можно просто преобразовывать файлы при открытии из UTF-8 в ANSI, без выявления кодировки...... smile 

Вот попробовал примерчик.

Код

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop
#include <iconv.h>

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
namespace UTF8CONVERTER
{}
 
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{  
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
if (OpenDialog1->Execute()) Memo1->Lines->LoadFromFile(OpenDialog1->FileName);        
 std::string CONVERTER::UTF8ToWin1251(const std::string &val)
{
    return UTF8CONVERTER::conv( "windows-1251", "UTF-8", val);
}}
//---------------------------------------------------------------------------



Ошибки:
[C++ Error] Unit1.cpp(26): E2316 'string' is not a member of 'std'
[C++ Error] Unit1.cpp(26): E2379 Statement missing ;

Может я что-то не так понял? Что надопоместить в namespace UTF8CONVERTER{}? 

Это сообщение отредактировал(а) s1lver - 9.1.2008, 10:19


--------------------
Я собрался жить вечно - пока все идет нормально!
PM MAIL ICQ   Вверх
artsb
Дата 9.1.2008, 20:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

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



Цитата(s1lver @  9.1.2008,  09:33 Найти цитируемый пост)
На мой взгляд можно просто преобразовывать файлы при открытии из UTF-8 в ANSI, без выявления кодировки.....

Если он уже был в ANSI, то получатся закорючки.

Fazil6 говорит, что распознать не получится. Можно просто сделать меню с выбором кодировки.


s1lver а откуда у тебя iconv.h?  smile 


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
s1lver
Дата 9.1.2008, 20:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Мне Fazil6 скинул на мыло.
Цитата

Если он уже был в ANSI, то получатся закорючки.


а у тебя уже есть работающий код? 

Это сообщение отредактировал(а) s1lver - 9.1.2008, 20:45


--------------------
Я собрался жить вечно - пока все идет нормально!
PM MAIL ICQ   Вверх
artsb
Дата 9.1.2008, 21:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

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



Цитата(s1lver @  9.1.2008,  20:42 Найти цитируемый пост)
а у тебя уже есть работающий код? 

Да нет, я решил обойтись встроенными средствами. А библитеку просто так взял. Всё равно пригодится.  smile 



--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
s1lver
Дата 9.1.2008, 21:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(artsb @  9.1.2008,  21:02 Найти цитируемый пост)
я решил обойтись встроенными средствами.


??? можешь подсказать?


--------------------
Я собрался жить вечно - пока все идет нормально!
PM MAIL ICQ   Вверх
artsb
Дата 9.1.2008, 21:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

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



Цитата(s1lver @  9.1.2008,  21:28 Найти цитируемый пост)
??? можешь подсказать?

Дык я ж ранее скриншот из хэлпа кидал. В хэлпе пиши "Character set conversions". А там разберёшься.
Я сам ещё толком не разбирался. Пока другим занят.

Это сообщение отредактировал(а) artsb - 9.1.2008, 21:56


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
s1lver
Дата 20.1.2008, 15:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



нарыл тут один примерчик, сейчас буду пробовать


Код

#include <windows.h>
#include <stdio.h>
#include <stdlib.h>

LPSTR xcode(LPCSTR src, UINT srcCodepage, UINT dstCodepage)
{
int wsize = MultiByteToWideChar(srcCodepage, 0, src, -1, NULL, 0);
LPWSTR wbuf = (LPWSTR)malloc(wsize*sizeof(WCHAR));
MultiByteToWideChar(srcCodepage, 0, src, -1, wbuf, wsize);
int size = WideCharToMultiByte(dstCodepage, 0, wbuf, -1, NULL, 0, NULL, NULL);
LPSTR buf = (LPSTR)malloc(size);
WideCharToMultiByte(dstCodepage, 0, wbuf, -1, buf, size, NULL, NULL);
free(wbuf);
return buf;
}


void main()
{
LPSTR p;

p = xcode("Дайте выпить поскорей!", 1251, 20866);
printf("KOI-8: %s\n", p);
free(p);

p = xcode("Дайте выпить поскорей!", 1251, 866);
printf("DOS-866: %s\n", p);
free(p);

p = xcode("Дайте выпить поскорей!", 1251, CP_UTF8);
printf("UTF-8: %s\n", p);
free(p);
}



--------------------
Я собрался жить вечно - пока все идет нормально!
PM MAIL ICQ   Вверх
artsb
Дата 20.1.2008, 20:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

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



Цитата(s1lver @  20.1.2008,  15:18 Найти цитируемый пост)
нарыл тут один примерчик

Молодец. Пригодится...


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
KTatsu
Дата 25.11.2008, 04:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Прошу простить за "некропостерство", но вопрос все еще в силе - как собрать библиотеку?
Ридми и инсталл я нашел, но толком ничего не понял из их содержания.

И тоже не совсем понял данный код:
Код

#include <iconv.h>

.....

//=======================================================================


namespace UTF8CONVERTER
{
    std::string convert(iconv_t cd, const std::string &val)
    {
        if(cd == (iconv_t)-1) return "";

        const size_t INBUFSIZE    =     val.length() + 1;
        const size_t OUTBUFSIZE    = 512;

        size_t x = INBUFSIZE;
        
        char *in_buf = new char[INBUFSIZE]; // удалить


        strncpy(in_buf, val.c_str(), val.length());
        in_buf[val.length()] = 0;
        const char * tbf = in_buf;


        std::string res;
        size_t con;
        while(x)
        {
            char out_buf[OUTBUFSIZE + 1];  
            char *pout_buf = out_buf;
            
            memset(pout_buf,0,OUTBUFSIZE + 1);
            
            size_t y = OUTBUFSIZE;
            con = iconv(cd, /*(const char**)*/&tbf, &x, &pout_buf, &y);
            
            res += out_buf;
            
        }
        delete [] in_buf;
        return res;
    }

    std::string conv(const char to[], const char from[], const std::string &val)
    {
        iconv_t cd = iconv_open(to, from);
        std::string r = convert(cd, val);
        iconv_close(cd);
        return r;    
    }


};
std::string CONVERTER::UTF8ToWin1251(const std::string &val)
{
    return UTF8CONVERTER::conv( "windows-1251", "UTF-8", val);
}

std::string CONVERTER::Win1251ToUTF8(const std::string &val)
{
    return UTF8CONVERTER::conv("UTF-8", "windows-1251", val);    
}
Я понял из какой кодировки в какую конвертируется, но я не понял как привязать данный код, скажем к мемо...
PM MAIL   Вверх
Infector
Дата 15.3.2009, 15:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



А можно еще вопрос небольшой:
нужно кодировку ДОС перегнать в Ansi, соответственно пишу код:

  for (int i=1; i<Memo2->Lines->Count; i++)
  {
   Memo1->Lines->Add(Utf8ToAnsi(Memo2->Lines->Strings[i]));
  }
В результате все запускается, но вместо преобразования кодировки получаю удаление строк с русскоязычными символами
PM MAIL   Вверх
xvr
Дата 16.3.2009, 19:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



ДОС - это не UTF8!

PM MAIL   Вверх
dumb
Дата 16.3.2009, 19:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

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



Infector, OemToChar
PM MAIL   Вверх
Страницы: (3) [Все] 1 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


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

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


 




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


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

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