Конвертировать строку в utf-8
От: Дикс Россия http://thedowntown.ru
Дата: 16.11.09 15:20
Оценка:
подскажите, желательно с простым примером, как в чистом С++ можно конвертировать строку в utf-8?

и на крайняк что можно сделать при подключенном бусте
http://thedowntown.ru — Даун Таун, треш креативы о Науме и мёртвом городке
Re: Конвертировать строку в utf-8
От: sraider http://dvinogradov.blogspot.com
Дата: 16.11.09 22:33
Оценка:
Д>подскажите, желательно с простым примером, как в чистом С++ можно конвертировать строку в utf-8?
Д>и на крайняк что можно сделать при подключенном бусте

а какая исходная кодировка? а то можно и так:
void ConvertAsciiToUtf8(std::string const &Ascii, std::string &Utf8)
{
    Utf8 = Ascii;
}
Re[2]: Конвертировать строку в utf-8
От: Дикс Россия http://thedowntown.ru
Дата: 17.11.09 06:39
Оценка:
Здравствуйте, sraider, Вы писали:

Д>>подскажите, желательно с простым примером, как в чистом С++ можно конвертировать строку в utf-8?

Д>>и на крайняк что можно сделать при подключенном бусте

S>а какая исходная кодировка? а то можно и так:

S>
void ConvertAsciiToUtf8(std::string const &Ascii, std::string &Utf8)
S>{
S>    Utf8 = Ascii;
S>}


=\
ну исходная кодировка на данный момент соответствует кодировке исходника ANSI, потому что задается как

#define MESSAGE "текст"

хотелось бы найти универсальное решение, чтобы конвертировать ANSI -> UTF-8

а в будущем буду грузить из файла через fin и в файле сам поставлю utf-8
только тут тоже вопрос — если из файла в утф достать строку и поместить в string mystring — она и там будет в utf-8, или надо использовать что-то типа wstring?
http://thedowntown.ru — Даун Таун, треш креативы о Науме и мёртвом городке
Re: Конвертировать строку в utf-8
От: McQwerty Россия  
Дата: 17.11.09 07:59
Оценка: 3 (1)
Здравствуйте, Дикс, Вы писали:

Д>подскажите, желательно с простым примером, как в чистом С++ можно конвертировать строку в utf-8?

Д>и на крайняк что можно сделать при подключенном бусте

Примерно так, если вход в UCS:
typedef std::basic_string <wchar_t> vstring;

// Если нет __int8, то 
typedef unsigned char __int8;

bool ucs_to_utf8 (const vstring& ucs, __int8* utf8, const size_t max_size) __THROW
{
    size_t j = 0;
    bool retcode = true;

    for (vstring::size_type k = 0; k < ucs. size (); ++ k)
    {
        if (j >= max_size - 1)
        {
            retcode = false;
            break;
        }
        const wchar_t symbol = ucs [k];

        if (symbol < 0x0080)
        {
            utf8 [j ++] = (__int8) symbol;    
        }
        else if (symbol < 0x0800)
        {
            if (j >= max_size - 2)
            {
                retcode = false;
                break;
            }

            utf8 [j++] = (__int8) (((symbol & 0x07C0) >>  6) | 0xC0);
            utf8 [j++] = (__int8) ( (symbol & 0x003F)        | 0x80);
            
        }
        else
        {
            if (j >= max_size - 3)
            {
                retcode = false;
                break;
            }
            utf8 [j++] = (__int8) (((symbol & 0xF000) >> 12) | 0xE0);
            utf8 [j++] = (__int8) (((symbol & 0x0FC0) >>  6) | 0x80);
            utf8 [j++] = (__int8) ( (symbol & 0x003F)        | 0x80);
        }
    }

    utf8 [j] = 0;

    return retcode;
} // ucs_to_utf8
Re[3]: Конвертировать строку в utf-8
От: Кодт Россия  
Дата: 17.11.09 10:22
Оценка:
Здравствуйте, Дикс, Вы писали:

Д>ну исходная кодировка на данный момент соответствует кодировке исходника ANSI, потому что задается как


Сделай, чтобы твой исходник был в кодировке UTF-8, и вуаля!
Нормальные редакторы и IDE это умеют.

Д>#define MESSAGE "текст"


Локализованные тексты можно хранить в отдельном файле. Даже если все остальные файлы в юзерской кодировке, конкретно этот можно сделать в UTF-8.
Компилятору-то какое дело, поток байтов и поток байтов.
Хотя, конечно, желательно, чтобы все исходники были не в перемешку.
... << RSDN@Home 1.2.0 alpha 4 rev. 1237>>
Перекуём баги на фичи!
Re: Конвертировать строку в utf-8
От: alsemm Россия  
Дата: 17.11.09 12:55
Оценка:
Здравствуйте, Дикс, Вы писали:

Д>подскажите, желательно с простым примером, как в чистом С++ можно конвертировать строку в utf-8?


Д>и на крайняк что можно сделать при подключенном бусте

http://unicode.org/Public/PROGRAMS/CVTUTF/ConvertUTF.h, http://unicode.org/Public/PROGRAMS/CVTUTF/ConvertUTF.c
Re[2]: Конвертировать строку в utf-8
От: Дикс Россия http://thedowntown.ru
Дата: 17.11.09 18:30
Оценка:
Здравствуйте, McQwerty, Вы писали:

MQ>Здравствуйте, Дикс, Вы писали:


Д>>подскажите, желательно с простым примером, как в чистом С++ можно конвертировать строку в utf-8?

Д>>и на крайняк что можно сделать при подключенном бусте

MQ>Примерно так, если вход в UCS:

MQ>
MQ>typedef std::basic_string <wchar_t> vstring;

MQ>// Если нет __int8, то 
MQ>typedef unsigned char __int8;

MQ>bool ucs_to_utf8 (const vstring& ucs, __int8* utf8, const size_t max_size) __THROW
MQ>{
MQ>    size_t j = 0;
MQ>    bool retcode = true;

MQ>    for (vstring::size_type k = 0; k < ucs. size (); ++ k)
MQ>    {
MQ>        if (j >= max_size - 1)
MQ>        {
MQ>            retcode = false;
MQ>            break;
MQ>        }
MQ>        const wchar_t symbol = ucs [k];

MQ>        if (symbol < 0x0080)
MQ>        {
MQ>            utf8 [j ++] = (__int8) symbol;    
MQ>        }
MQ>        else if (symbol < 0x0800)
MQ>        {
MQ>            if (j >= max_size - 2)
MQ>            {
MQ>                retcode = false;
MQ>                break;
MQ>            }

MQ>            utf8 [j++] = (__int8) (((symbol & 0x07C0) >>  6) | 0xC0);
MQ>            utf8 [j++] = (__int8) ( (symbol & 0x003F)        | 0x80);
            
MQ>        }
MQ>        else
MQ>        {
MQ>            if (j >= max_size - 3)
MQ>            {
MQ>                retcode = false;
MQ>                break;
MQ>            }
MQ>            utf8 [j++] = (__int8) (((symbol & 0xF000) >> 12) | 0xE0);
MQ>            utf8 [j++] = (__int8) (((symbol & 0x0FC0) >>  6) | 0x80);
MQ>            utf8 [j++] = (__int8) ( (symbol & 0x003F)        | 0x80);
MQ>        }
MQ>    }

MQ>    utf8 [j] = 0;

MQ>    return retcode;
MQ>} // ucs_to_utf8
MQ>



не могу понять как задать первый параметр функции

со вторым понятно
__int8 *newUtf8 = new __int8(20);
длину тоже смогу найти

итого
ucs_to_utf8 (myStr, newUtf8, myStr.length());

но вот как создать vstring?

const vstring *myStr = new const vstring; // создаем
myStr = "тест"; // cannot convert `const char[5]' to `const vstring*' in assignment
http://thedowntown.ru — Даун Таун, треш креативы о Науме и мёртвом городке
Re[2]: Конвертировать строку в utf-8
От: Дикс Россия http://thedowntown.ru
Дата: 17.11.09 18:31
Оценка:
Здравствуйте, alsemm, Вы писали:

A>Здравствуйте, Дикс, Вы писали:


Д>>подскажите, желательно с простым примером, как в чистом С++ можно конвертировать строку в utf-8?


Д>>и на крайняк что можно сделать при подключенном бусте

A>http://unicode.org/Public/PROGRAMS/CVTUTF/ConvertUTF.h, http://unicode.org/Public/PROGRAMS/CVTUTF/ConvertUTF.c

404
http://thedowntown.ru — Даун Таун, треш креативы о Науме и мёртвом городке
Re[3]: Конвертировать строку в utf-8
От: alsemm Россия  
Дата: 18.11.09 10:23
Оценка:
Здравствуйте, Дикс, Вы писали:

Д>Здравствуйте, alsemm, Вы писали:


A>>Здравствуйте, Дикс, Вы писали:


Д>>>подскажите, желательно с простым примером, как в чистом С++ можно конвертировать строку в utf-8?


Д>>>и на крайняк что можно сделать при подключенном бусте

A>>http://unicode.org/Public/PROGRAMS/CVTUTF/ConvertUTF.h, http://unicode.org/Public/PROGRAMS/CVTUTF/ConvertUTF.c

Д>404

http://www.google.de/search?q=ConvertUTF.h
http://www.koders.com/c/fid26678D7D6076ED6880A07A83497F6BD8D33FDA7A.aspx
Re: Конвертировать строку в utf-8
От: igna Россия  
Дата: 18.11.09 12:22
Оценка:
Здравствуйте, Дикс, Вы писали:

Д>подскажите, желательно с простым примером, как в чистом С++ можно конвертировать строку в utf-8?


Д>и на крайняк что можно сделать при подключенном бусте


В бусте есть только utf8_codecvt_facet.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.