我有一个 UTF-16LE 字符串“TEST”及其 hexdump,如下所示
feff 0074 0065 0073 0074 000a
如果我在 bash 上使用命令 iconv 将此字符串转换为 UTF-8,那么它将被转换而没有任何问题。
6574 7473 000a
但是,如果我对我的 C 程序执行相同的操作,那么一旦遇到字符“T”的 0x00,iconv 函数似乎将其视为空终止,即使我已将字符串长度指定为 12(包括bom 和空终止)。
65 000个
下面是我正在测试的代码。但是,如果我转换任何大小的宽字符字符串(中间没有 0x00 字节)会返回正确的输出。
char *cOutput; // Output buffer with more enough size required
size_t tOutput;
char *cInput; // string wide characters
size_t tInput;
iconv_t cd;
........
cd = iconv_open("UTF8//TRANSLIT", "UTF-16LE");
iconv(cd, &cInput, &tInput, &cOutput, &tOutput);
这个问题有什么解决方案吗?或者我做错了什么?任何输入将不胜感激。