| 
 | 
 
我在一个文档中(test_iconv.txt)写入几个汉字(内容为:汉王科技)保存为UTF-8格式。然后写一个小程序并打印出每个字节的十六进制,程序如下: 
 
#include <stdio.h> 
#include <string.h> 
 
main(char argc, char **argv) 
{ 
FILE *fp1; 
char buffer[2000]; 
int ch, i; 
 
if (!(fp1 = fopen(argv[1], "r"))) { 
printf("File cannot be opened: argv[1]\n"); 
exit(1); 
} 
 
i = 0; 
while ((ch = fgetc(fp1)) != EOF) { 
buffer[i++] = ch; 
printf("\n%x", ch); 
if (i > 1999) { 
printf("buffer not enough"); 
exit(1); 
} 
} 
printf("\n%s\n", buffer); 
 
fclose(fp1); 
} 
 
程序输出的结果如下: 
 
xueping@xp-dev:/opt/xp-dev/c-dev/example$ ./file3 test_iconv.txt 
 
e6 
b1 
89 
e7 
8e 
8b 
e7 
a7 
91 
e6 
8a 
80 
a 
汉王科技 
 
 
在windows下用UltraEdit以十六进制格式打开test_iconv.txt显示的内容如下: 
FF FE 49 6C 8B 73 D1 79 80 62 0A 00 
 
为什么两边打印出来的内容不一样?各位大侠帮忙解释一下。 
UTF-8一个汉字为两个字节,为什么在Linux下4个汉字打印出来12字节? 
 
如果把test_iconv.txt保存为gb2312,两边提取的结果是一样的。 
 
[ 本帖最后由 xuepinge 于 2008-7-24 15:32 编辑 ] |   
 
 
 
 |