1

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

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

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

目标是一个 4096 字节的缓冲区。

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

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

4

1 回答 1

2

正如文档所说:

Target [...] 在输出缓冲区中第一个可用的 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 - outputUChars 写入输出缓冲区。

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

于 2012-09-19T22:12:55.900 回答