QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 2315|回复: 6

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

[复制链接]
发表于 2008-7-24 13:55:07 | 显示全部楼层 |阅读模式
我在一个文档中(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 编辑 ]
 楼主| 发表于 2008-7-24 17:10:07 | 显示全部楼层
找到问题了,UltraEdit是以Unicode格式打开utf-8格式的文件;如果把test_iconv.txt转换成UCS-2格式两边读取内容就一样了。
回复

使用道具 举报

发表于 2008-8-11 11:31:07 | 显示全部楼层
UTF-8一个汉字为两个字节

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

使用道具 举报

发表于 2008-8-29 13:25:21 | 显示全部楼层
借您地儿问个相关的问题:
怎么判断以个文件的字符编码格式,特别是big5
回复

使用道具 举报

发表于 2008-8-29 13:39:26 | 显示全部楼层
貌似没办法?

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

使用道具 举报

发表于 2008-8-29 13:40:26 | 显示全部楼层
回复

使用道具 举报

发表于 2008-8-29 14:24:32 | 显示全部楼层
现在最达的问题就是big5的形式,不知道应该如何识别
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-4-25 15:54 , Processed in 0.184999 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表