UTF8转换

时间:2011-04-09 18:43:17

标签: utf-8 encode

我需要生成一个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作为参数传递时,

第三方库扼流圈。显然,我在使用微软的WideCharToMultiByte的Windows平台上,但最终我不想需要这个函数调用,因为这个代码也必须在Linux下在嵌入式平台上编译,但是当我到达它时我会越过那个桥

现在,我只需要能够将wchar_t或char转换为UTF8编码的字符串,最好不使用任何STL。我不会在嵌入式平台上使用STL。

谢谢!

2 个答案:

答案 0 :(得分:2)

类似的东西:

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。

答案 1 :(得分:0)

如果您仍在寻找答案,可以使用C语言简单实现utf8转换器:

/*
** 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';
}