我需要生成一个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。
谢谢!
答案 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';
}