|
我在一个文档中(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 编辑 ] |
|