使用ICU库的UTF-16到UTF-8

时间:2014-06-17 20:53:42

标签: utf-8 utf-16 icu

我想将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);

我得到字节为 - (大随机数) 和原始目标位置的垃圾

我缺少什么?

1 个答案:

答案 0 :(得分:0)

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

像...一样的东西。

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