以下のように、UTF-16LE 文字列 'TEST' とその 16 進ダンプがあります。
フェフ 0074 0065 0073 0074 000a
bash でコマンド iconv を使用してこの文字列を UTF-8 に変換すると、問題なく変換されます。
6574 7473 000a
しかし、C プログラムで同じことを行うと、文字 'T' で 0x00 が検出されるとすぐに、文字列の長さを 12 ( bom および null 終端)。
65 000a
以下は、私がテストしているコードです。ただし、任意のサイズのワイド char 文字列を変換すると (間に 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);
この問題の解決策はありますか、それとも何か間違っているのでしょうか? 任意の入力をいただければ幸いです。