Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Indy 10, BCB6 и UTF-8 
V
    Опции темы
ilyuha
Дата 5.6.2013, 18:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Приветствую, уважаемые комрады smile
Ситуация в следующем. Мне необходимо в давно поддерживаемый  проект добавить функции приема и отправки E-mail(что уже реализовано).
Полученные и отпроавленные сообщения пишутся в базу, куда тема и тело сообщения должны писаться в utf-8.
При отправке проблем нет. А вот при приеме начинается самое интересное... Классы Indy не производят автоматичекой перекодировки текста в UTF-8, в неюникодных весиях IDE, коей является BCB6.
Перерыв весь гугл и доки  по Indy, я так не нашел способа, как можно преобразовать уже полученное сообщение в UTF-8.
Кодировка сообщение, после их получения, известна через свойство TIdMessage::CharSet.

Копал в сторону TIdCoder и TIdDecoder, но что-то безрезультатно... Может плохо искал? Помогите, плиз.

Если средствами Инди это сделать нельзя, подскажите, пожалуйста, нормальную либу перекодирования текста для билдера.

ЗЫ обновить билдер нет никакой возможности. 
PM MAIL   Вверх
borisbn
Дата 6.6.2013, 06:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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





--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
ilyuha
Дата 6.6.2013, 09:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



borisbn, Спасибо, но, как я понял, возможности подружить ее с билдером нет. А городить костыли через ShellExecute не хотелось бы...

Есть ли альтернативы? Ведь, полной функциональности, которая есть в iconv, и не надо. Достаточно, чтобы либа могла переводить в UTF-8 текст в кодировках, используемых для рпередачи мыла в восточной европе - cp1250-1259, КОИ8...

ЗЫ С носталгией вспоминаю QTextCodec...
PM MAIL   Вверх
borisbn
Дата 6.6.2013, 10:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Лови (в аттаче). Делаешь
Цитата
implib.exe iconv.lib iconv.dll

подключаешь полученную lib в проект, кидаешь dll-ку к твоему exe-шнику.
Там же я положил мою обёрточку. В общем, там всё д.б. понятно

Присоединённый файл ( Кол-во скачиваний: 2 )
Присоединённый файл  iconv.zip 625,61 Kb


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
ilyuha
Дата 6.6.2013, 11:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



borisbn, Спасибо! Буду пробовать
PM MAIL   Вверх
ilyuha
Дата 6.6.2013, 19:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



borisbn, Вроде, все сделал верно, но что-то не конвертит... По порядку:
После implib.exe iconv.lib iconv.dll линкер ругался, что не может найти функции.
Это я решил, выполнив:
impdef.exe iconv.def iconv.dll
Далее, отредактировал iconv.def(имена функций там имели вид lib*, вместо _lib).
И сделал:
implib.exe iconv.lib iconv.def
implib выдал:
Цитата

Name: 'iconv' Ext: '.dll' Base: 0x00000000
Name: 'ICONV.DLL' Ext: '.dll' Base: 0x00000000

Это меня напрягло, да. Но прога собралась и функция iconv вызывается.
Далее, я немного приспособил код borisbn под свои нужды:
Код

CCodeConverter::CCodeConverter( const char *from, const char* to )
{
    converter = iconv_open( to, from );
}

AnsiString CCodeConverter::convert(const char* str, size_t length)
{
    AnsiString out;
    
    size_t in_size  = length;
    const char* in_ptr = str;

    char buffer[ BUFFER_LENGTH ];

    while ( in_size )
    {
        char*  out_ptr  = buffer;
        size_t out_size = BUFFER_LENGTH - 1;
        size_t size = iconv( converter, &in_ptr, &in_size, &out_ptr, &out_size );
        if ( size == (size_t)( -1 ) )
            break;
        buffer[ BUFFER_LENGTH - out_size - 1 ] = 0;
        out = out + buffer;
    }
    return out;
}

iconv всегда возвращает -1. errno == 0. converter валиден.
Используется этот код так:
Код

....
    CCodeConverter converter("KOI8-R", "UTF-8");
    return converter.convert(str.c_str(), str.Length());

Есть у кого какие-нибудь мысли? Хелп  smile 
PM MAIL   Вверх
ilyuha
Дата 7.6.2013, 09:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Людиии, подкиньте хоть какую-нить идею smile 
Есть ли альтернатива iconv?
PM MAIL   Вверх
borisbn
Дата 7.6.2013, 09:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



ilyuha, последнее, чем могу помочь - это подкинуть iconv.lib (в аттаче) для билдера, который я сделал, и с которым у меня линкуется и работает (!!) твой код без единого изменения.

Присоединённый файл ( Кол-во скачиваний: 3 )
Присоединённый файл  iconv.lib 1,50 Kb


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
ilyuha
Дата 7.6.2013, 10:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



borisbn, Не работает :( Должно что-то отличаться, если у тебя работает, а у меня нет. Какая у тебя версия билдера?
PM MAIL   Вверх
borisbn
Дата 7.6.2013, 10:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



У меня 5-й. 
хммм... Ну, лови весь проект. Я не уверен, но м.б. он даже в твоём билдере откроется. Если заработает - ищи отличия в настройках проекта. Убедись, что у тебя в настройках проекта тип вызова по-умолчанию стоит __cdecl.

Присоединённый файл ( Кол-во скачиваний: 2 )
Присоединённый файл  qq.zip 628,26 Kb


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
ilyuha
Дата 7.6.2013, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



borisbn, Спасибо большое. Все было куда тривиальнее. Сделал размер буфера == length * 4 и  все заработало
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

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

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

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

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


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

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


 




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


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

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