Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Кодировка, utf-8 
:(
    Опции темы
lonevagrant
Дата 10.12.2009, 21:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Здравствуйте.
У меня возникла проблема.
Юзаю С++ Builder +Curl
Получаю я страничку google (utf-8).
Мне нужно перевести ее в String, для дальнейшей работы с ней функциями "String.Pos(), String.SubStr()" и так далее.

Код Врайтера.

Код


static size_t Writer(char *data, size_t size, size_t nmemb, AnsiString *buffer)
{
      size_t result = 0;

      if(buffer != NULL)
      {
          buffer->Insert(data,buffer->Length()+1);
          result = size * nmemb;
      }

      return result;
}




Это сообщение отредактировал(а) lonevagrant - 10.12.2009, 21:34
PM MAIL   Вверх
Alca
Дата 10.12.2009, 22:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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





--------------------
PM WWW ICQ Skype Jabber   Вверх
Alca
Дата 11.12.2009, 00:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Код

//---------------------------------------------------------------------------
//TODO: + sStrToWStr (преобразование std::string в std::wstring)
std::wstring sStrToWStr(const std::string &csStr, UINT uiCodePage) {
    /*DEBUG*///not need

    std::wstring Res;

    INT iSize = ::MultiByteToWideChar(uiCodePage, 0, csStr.c_str(), - 1, NULL, 0);
    /*DEBUG*/XASSERT_RET(0 < iSize, std::wstring());

    Res.resize(iSize - 1);    //без '\0'
    iSize = ::MultiByteToWideChar(uiCodePage, 0, csStr.c_str(), - 1, static_cast<LPWSTR>(&Res.at(0)), iSize);
    /*DEBUG*/XASSERT_RET(0 < iSize, std::wstring());

    return Res;
}
//---------------------------------------------------------------------------
//TODO: + sWStrToStr (преобразование std::wstring в std::string)
std::string sWStrToStr(const std::wstring &cwsStr, UINT uiCodePage) {
    /*DEBUG*///not need

    std::string Res;

    INT iSize = ::WideCharToMultiByte(uiCodePage, 0, cwsStr.c_str(), - 1, NULL, 0, NULL, NULL);
    /*DEBUG*/XASSERT_RET(0 < iSize, std::string());

    Res.resize(iSize - 1);    //без '\0'
    iSize = ::WideCharToMultiByte(uiCodePage, 0, cwsStr.c_str(), - 1, static_cast<LPSTR>(&Res.at(0)), iSize, NULL, NULL);
    /*DEBUG*/XASSERT_RET(0 < iSize, std::string());

    return Res;
}
//---------------------------------------------------------------------------
//TODO: + sConvertCodePage (конвертирование кодировок
std::string sConvertCodePage(const std::string &csSource, UINT uiCodePageSource, UINT uiCodePageDest) {
    //CP_ACP(ANSI) <-> CP_UTF8(UTF-8)
    //1251  (WIN)  <-> 20866  (KOI-8r) 

    return sWStrToStr(sStrToWStr(csSource, uiCodePageSource), uiCodePageDest);
}
//---------------------------------------------------------------------------


Код

    //-------------------------------------
    //sConvertCodePage
    {
        const std::string csAnsiStr[] = {
            "Это АНСИ-строка...", 
            "мцйукацу длоктьрушщрьу- зьмцщкшепьцмукжбщесукж 234563476 45674_+()_ (*?)casf,fjpo,e rfWAERCWER$%^*())_+)+*()BNVNH*", 
            "123 456 7890", 
            "!@#$% ^&*()_+|* /{}:@' \"?><",
            " ", 
            "" 
        };

        for (int i = 0; i < ARRAYSIZE(csAnsiStr) - 1; i ++) {
            //CP_ACP(ANSI) <-> CP_UTF8(UTF-8)
            std::string sAnsi;  
            std::string sUtf8;           

            sUtf8 = sConvertCodePage(csAnsiStr[i], CP_ACP,  CP_UTF8);
            sAnsi = sConvertCodePage(sUtf8,        CP_UTF8, CP_ACP);    
            XASSERT(csAnsiStr[i] == sAnsi);


            //1251(WIN)  <-> 20866(KOI-8r)
            std::string sKoiStr;
            std::string sWinStr;

            sKoiStr = sConvertCodePage(csAnsiStr[i], 1251,  20866);
            sWinStr = sConvertCodePage(sKoiStr,      20866, 1251);
            XASSERT(csAnsiStr[i] == sWinStr);
        }
    }



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

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

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

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

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


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

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


 




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


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

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