UTF8 Конверсия - PullRequest
       0

UTF8 Конверсия

0 голосов
/ 09 апреля 2011

Мне нужно сгенерировать строку UTF8 для передачи в стороннюю библиотеку, и у меня возникают проблемы с поиском правильной гимнастики ... Кроме того, что еще хуже, я застрял с использованием C ++ Builder 6 и каждого примеранашел разговоры об использовании std :: string, которые CBuilder6 явно не поддерживает.Я хотел бы достичь этого без использования STL.

Вот мой код, который, кажется, пока не работает.

wchar_t *SS1;
char *SS2;

  SS1 = L"select * from mnemonics;";

  int strsize =  WideCharToMultiByte(CP_UTF8, 0, SS1, wcslen(SS1), NULL, 0, NULL, NULL);

  SS2 = new char[strsize+1];

  WideCharToMultiByte( CP_UTF8, 0, SS1, wcslen(SS1), SS2, strsize, NULL, NULL);

Дроссели сторонних библиотек приЯ передаю это SS2 в качестве параметра.Очевидно, что я на платформе Windows, использующей Microsoft WideCharToMultiByte, но в конечном итоге мне не нужно вызывать этот вызов функции, так как этот код также должен быть скомпилирован на встроенной платформе под Linux, но я перейду этот мост, когда доберусь до него.

На данный момент мне просто нужно иметь возможность преобразовать wchar_t или char в строку в кодировке UTF8, предпочтительно без использования STL.У меня не будет STL на встроенной платформе.

Спасибо!

Ответы [ 2 ]

2 голосов
/ 09 апреля 2011

Примерно так:

extern void someFunctionThatAcceptsUTF8(const char* utf8);

const char* ss1 = "string in system default multibyte encoding";

someFunctionThatAcceptsUTF8( w2u( a2w(ss1) ) ); // that conversion you need:
                                                 // a2w: "ansi" -> widechar string
                                                 // w2u: widechar string -> utf8 string.

Вам просто нужно взять и включить этот файл: http://code.google.com/p/tiscript/source/browse/trunk/sdk/include/aux-cvt.h

Он должен работать на Builder просто отлично.

0 голосов
/ 12 апреля 2017

Если вы все еще ищете ответ, вот простая реализация преобразователя utf8 на языке C:

/*
** Transforms a wchar to utf-8, returning a string of converted bytes
*/

void            ft_to_utf8(wchar_t c, unsigned char *buffer)
{
    if (c < (1 << 7))
        *buffer++ = (unsigned char)(c);
    else if (c < (1 << 11))
    {
        *buffer++ = (unsigned char)((c >> 6) | 0xC0);
        *buffer++ = (unsigned char)((c & 0x3F) | 0x80);
    }
    else if (c < (1 << 16))
    {
        *buffer++ = (unsigned char)((c >> 12) | 0xE0);
        *buffer++ = (unsigned char)(((c >> 6) & 0x3F) | 0x80);
        *buffer++ = (unsigned char)((c & 0x3F) | 0x80);
    }
    else if (c < (1 << 21))
    {
        *buffer++ = (unsigned char)((c >> 18) | 0xF0);
        *buffer++ = (unsigned char)(((c >> 12) & 0x3F) | 0x80);
        *buffer++ = (unsigned char)(((c >> 6) & 0x3F) | 0x80);
        *buffer++ = (unsigned char)((c & 0x3F) | 0x80);
    }
    *buffer = '\0';
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...