你是如何獲取輸入數據到你的程序?
我測試過使用此代碼的情況下,它似乎工作:
#include <stdio.h>
#include <iconv.h>
#include <errno.h>
int main(){
char data[10] = {0x4f,0xdd,0x53,0x55,0x9a,0x8c,0x8b,0xc1, 0, 0};
char outdata[20];
char *dataptr;
char *outdataptr;
iconv_t cd;
size_t result;
size_t inbytesleft = 8;
size_t outbytesleft = 20;
int i;
cd = iconv_open("GB2312", "UTF-16BE");
dataptr = data;
outdataptr = outdata;
result = iconv(cd, &dataptr, &inbytesleft, &outdataptr, &outbytesleft);
if(result == -1)
printf("Error: %d\n", errno);
printf(" result: %zd\n", result);
printf(" inbytesleft: %zd\n", inbytesleft);
printf("outbytesleft: %zd\n", outbytesleft);
for(i = 20; i > outbytesleft; i--){
if(i != 20)
printf(",");
printf("0x%02x", *((unsigned char *)&(outdata[20-i])));
}
printf("\n");
return 0;
}
它打印
result: 0
inbytesleft: 0
outbytesleft: 12
0xb1,0xa3,0xb5,0xa5,0xd1,0xe9,0xd6,0xa4
這似乎是正確的。
項目在可變數據的陣列是保單驗證
的UTF-16BE編碼。如果這沒有幫助,你可以發佈您的代碼進行分析?
發生這種情況時返回代碼和'errno'是什麼? – Mat 2011-06-01 11:00:57
我不知道這個方法的細節,但是你有可能指定了一些字節數,把右邊的切割放在一個UTF-8字符的中間,並且方法選擇了首先完成字符? – 2011-06-01 11:10:51
@Mat返回代碼是(size_t)-1,errno是EILSEQ,意思是「在輸入中遇到了一個無效的多字節序列」。@ Joachim Sauer,unicode完好無損,它是從PDF文件中提取的,代碼可以由adobe reader – PDF1001 2011-06-02 00:27:37