int conv_utf8_to_ucs2(const char* src, size_t len)
{
iconv_t cb = iconv_open("UTF-16", "UTF-8");
if (cb == (iconv_t)(-1))
return 0;
uint16_t* outBuff = new uint16_t[len + 1];
char* pout = (char*)outBuff;
size_t inRemains = len;
size_t outRemains = len * sizeof(uint16_t);
printf("inRemains:%d outRemains:%d\n", (int)inRemains, (int)outRemains);
size_t cvtlen = iconv(cb, &src, (size_t*)&inRemains, (char**)&pout, (size_t*)&outRemains);
if (cvtlen == (size_t)-1) {
//CONVERSION ALWAYS FAILS
goto out;
}
*pout = 0;
printf("inRemains:%d outRemains:%d cvtlen:%d\n", (int)inRemains, (int)outRemains, (int)cvtlen);
for (int i = 0; (i < len) && outBuff[i]; i++)
printf("0x%04x\n", outBuff[i]);
out:
if (outBuff)
delete[] outBuff;
iconv_close(cb);
return 0;
}
int _tmain(int argc, _TCHAR* argv[])
{
char utf8_str[] = "안녕 세상아?";
int len = strlen(utf8_str);
conv_utf8_to_ucs2(utf8_str, len);
return 0;
}
我有这个小程序将UTF8的字符串转换为UTF16,但iconv
函数总是返回-1。我调试进入它的实现,但找不到任何提示。有人可以提供对此libiconv用法的深入了解吗?