搬家后的博客链接: IT客栈 www.itkezhan.org
昨晚写了java的文本编辑器,写完发现 当我里面的内容输入 “什么” 保存了之后的,用window下面自带的编辑器打开的时候出现了乱码。但是如果输入内容是 “什么啊” 又不会出现这种错误情况。
结果今天上午写了一个同样的C程序 结果发现也会出现这种情况。
问了一下朋友
原来不同编码集有些编码是重复,就是两个编码集之间存在互相覆盖的内容。 当你的程序没有声明指定的编码集的时候,有系统通过识别你输入内容的所属范围。然后选编码集。
这样因为 “什么”这两个字的编码范围在两个不同编码集的重叠部分(例如 编码集A 与 编码集B)。这时候系统会帮我在这里面选一个编码集。 因为 “什么” 这两个字,在A编码集里面也可以编码,在B编码集里面也可以编码,这时候系统为我选了 A 编码集,但是实际上我这个内容要用 B 编码集来编码才不会出现乱码。 所以就造成了“什么”会出现乱码,其实在windows 文本编辑器一般里面有个编码方式选择,如果出现乱码选其他编码方式就可以了。
但是为什么输入“什么啊”就不会出现乱码
因为这个时候“什么啊”系统识别后,匹配的内容只属于一个编码集B 这时候就没有 A 编码集的出现,就不会出现错误了。 因为 “什么啊” 这个“啊” 在A编码集里面找不到。
我暂时的理解就是这样。
程序:
#include<stdio.h>
int main()
{
char c[] = "什么";//如果用这句打开文件会出现乱码
//char c[] = "什么啊" //如果用这句不会出现乱码
char g[10];
FILE *f;
f = fopen("www.c","w+");
fputs("什么",f);
fseek(f,0,SEEK_END);
fgets(g,2,f);
printf("%s",g);
return 0;
}