我是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什么?
答案 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
个字符(=字节)。