xuepinge 发表于 2008-7-24 13:55:07

UTF-8编码问题,请各位大侠帮忙解释一下

我在一个文档中(test_iconv.txt)写入几个汉字(内容为:汉王科技)保存为UTF-8格式。然后写一个小程序并打印出每个字节的十六进制,程序如下:

#include <stdio.h>
#include <string.h>

main(char argc, char **argv)
{
FILE *fp1;
char buffer;
int ch, i;

if (!(fp1 = fopen(argv, "r"))) {
printf("File cannot be opened: argv\n");
exit(1);
}

i = 0;
while ((ch = fgetc(fp1)) != EOF) {
buffer = 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 编辑 ]

xuepinge 发表于 2008-7-24 17:10:07

找到问题了,UltraEdit是以Unicode格式打开utf-8格式的文件;如果把test_iconv.txt转换成UCS-2格式两边读取内容就一样了。

mozilla 发表于 2008-8-11 11:31:07

UTF-8一个汉字为两个字节
应该是:UTF-8一个汉字为三或四个字节

CMAX 发表于 2008-8-29 13:25:21

借您地儿问个相关的问题:
怎么判断以个文件的字符编码格式,特别是big5

stdio 发表于 2008-8-29 13:39:26

貌似没办法?

如果有办法,为什么HTML 文件里面要有local set?

stdio 发表于 2008-8-29 13:40:26

找到这个

http://topic.csdn.net/u/20080603/17/e056e384-93e2-44ed-8d62-63dc0b38546b.html

CMAX 发表于 2008-8-29 14:24:32

现在最达的问题就是big5的形式,不知道应该如何识别
页: [1]
查看完整版本: UTF-8编码问题,请各位大侠帮忙解释一下