- 注册时间
- 2006-2-26
- 最后登录
- 2008-10-24
⑥精研
- 积分
- 2470
|
楼主 |
发表于 2007-2-14 19:59:02
|
显示全部楼层
还是不行,最多只有6000多个……不知道为何……- void main()
- {
- FILE *fp;
- unsigned char gbk_mb[3] = {0,0,0};
- unsigned char utf16_mb[3] = {0,0,0};
- int count=0;
- iconv_t cd;
- const char *inbuf;
- char *outbuf;
- size_t st;
- size_t inbyte;
- size_t outbyte;
- fp = fopen("G:\\\\gbk2utf16.txt","w+");
- cd = iconv_open("cp936","utf-16");
- if (cd == (iconv_t)-1)
- {
- puts("iconv_open failed.");
- goto ed;
- }
-
- printf("Total converted: 0 ");
- for (int i=0x80; i<0xff; i++)
- {
- gbk_mb[0] = i;
- for (int j=0x40; j<0xff; j++)
- {
- gbk_mb[1] = j;
- inbuf = (const char*)gbk_mb;
- outbuf = (char*)utf16_mb;
- inbyte = 3;
- outbyte = 3;
- st = iconv(cd, &inbuf, &inbyte, &outbuf, &outbyte);
- if (st != (size_t)-1)
- {
- fprintf(fp, "\\t{0x%02x%02x,0x%02x%02x},\\n", gbk_mb[0], gbk_mb[1], utf16_mb[0], utf16_mb[1]);
- count++;
- printf("\\b\\b\\b\\b\\b\\b%d", count);
- }
- }
- }
- fprintf(fp, "// %d total.", count);
- ed:
- iconv_close(cd);
- fclose(fp);
- }
复制代码 i循环到0xa0的时候调试窗口能看到gbk_mb里的确是能显示的汉字,但iconv总返回-1,errno为EINVAL……尝试转换到UTF-8就更可怜,只有几百个…… [s:5] |
|