使用ICU库将UTF-16转换为UTF-8

4

我想将UTF-16字符串转换为UTF-8。在Unicode的推荐下,我使用了ICU库。但是由于默认编码格式是UTF-16,我在进行转换时遇到了问题。我尝试使用转换器:

UErrorCode myError = U_ZERO_ERROR;
UConverter *conv = ucnv_open("UTF-8", &myError);
int32_t bytes = ucnv_fromUChars(conv,   target, 0, (UChar*)source, numread, &myError);
char *targetLimit = target + reqdLen;
const UChar *sourceLimit = mySrc + numread;
ucnv_fromUnicode(conv,&target, targetLimit, &mySrc, sourceLimit, NULL, TRUE, &myError);

我在原始目标位置收到了-(大随机数)字节和垃圾数据。我缺少什么?

忘了提到UTF-16期望是小端或大端。 - user3749452
1个回答

1

在指定UErrorCode参数的调用之后检查错误是最佳实践。我会从那里开始。

例如...

if (U_FAILURE(status)) 
{
    std::cout << "error: " << status << ":" << u_errorName(status) << std::endl;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接