Поиск:

Ответ в темуСоздание новой темы Создание опроса
> преобразовать iso-8859-1 в ANSI 
:(
    Опции темы
elCreator
Дата 14.11.2007, 01:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Как средствами С++ преобразовать текст в вышеуказанной кодировке в обычный, правильно отображаемый, скажем, в Memo?
PM WWW ICQ   Вверх
Fazil6
Дата 14.11.2007, 02:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



билиотека 
iconv

пример
Код

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


Шустрый
*


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

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



Хотелось бы без библиотек (тем более, что она 4 с лишним метра весит), а просто принцип кодировки - написать можно и самому...
PM WWW ICQ   Вверх
Fazil6
Дата 16.11.2007, 00:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(elCreator @  15.11.2007,  22:49 Найти цитируемый пост)
Хотелось бы без библиотек (тем более, что она 4 с лишним метра весит), а просто принцип кодировки - написать можно и самому...

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


Эксперт
*


Профиль
Группа: Участник
Сообщений: 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;
}

Универсальна - добавлять можно сваи. Для TMemo:

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

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

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

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

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


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

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


 




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


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

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