使用ucnv_toUnicode进行ICU转换

时间:2012-09-19 21:32:58

标签: c unicode icu

我是ICU(IBM的unicode库)的新手。我正在以块的形式阅读一个大文件,我正在尝试将其从UTF-8转换为UTF-16。

我正在使用ucnv_toUnicode,我遇到了一个问题:如何确定转换器写入目标的字节数?

        ucnv_toUnicode(conv, &target, targetLimit, 
                   &source, sourceLimit, NULL,
                   feof(f)?TRUE:FALSE,         
                   &status);

target是一个4096字节的缓冲区。

根据api文档,它将被ucnv_toUnicode移动到最后一次UChar复制之后。似乎我应该能够在目标和原始位置之间进行某种算术来确定这一点,但我是C的新手。任何人都可以帮我一把吗?

现在假设我想fwrite()放入目标的内容。对于单位的大小和数量,我会传递给fwrite什么?

1 个答案:

答案 0 :(得分:2)

正如文件所说:

  

目标[...]在输出缓冲区中的第一个可用的UChar处开始指针,最后指向写入输出的最后一个UChar。

所以很简单:

char input[SLEN];
UChar output[TLEN];

char const * source = input;
UChar * target = output;

ucnv_toUnicode(conv, &target, output + TLEN,
               &source, input + SLEN, NULL, feof(f), &status);

现在您已将target - output UChars写入输出缓冲区。

输入也是如此;你将消耗source - input个字符(=字节)。