编辑器字符集的理解

来源:互联网 发布:西蒙弗雷泽大学 知乎 编辑:程序博客网 时间:2024/05/21 06:29

1

自己写一个c语言读文件的程序:

 

read进来一个文件,然后保存在数组里,将调用printf进行显示,其实printf就是调用了os的接口将其控制台显示。因为我们是在中文xp操作系统上的,所以调用printf的时候其实是调用的xp操作系统的输出函数,输出到控制台中,并且按照gb2312编码显示。所以如果read进来一个utf-8的文件,直接read,printf,而不进行编码转换的话,肯定就是乱码了。

 

2

然后讲编辑器,编辑器是一个进程,它从硬盘上read进来文件,然后调用其他朝ui上显示的os接口,自然就将汉字显示了啊。所以我们给不妨假设是TextOutput这个函数,一些字符对应的字符串,那就必须是正确的gbk编码格式的汉字才能够正常显示。

 

所以既然编辑器能够正常显示我们输入的字符,那么它就肯定在最后调用操作系统显示的接口的时候,将正确的编码字符传给操作系统了,比如中文xp,最后给os的汉字对应的字节流,应该是gbk编码的,这样os才能正确显示。

 

3

下面是输入法的问题了,输入法也是一个程序,它截获我们输入的键盘事件,并将一些字符写出来供我们选择,当我们摁下回车按钮的时候,这个按钮也被输入法截获,它会给当前编辑器发送一个消息,收到消息的编辑器就会过来取刚刚输入进去并由输入法转化过的字符。。

所以存在内存里的应当是gbk编码的字符。如果这个编辑器想要显示,就会调用TextOutput这个含义的系统调用将字符传给os,供其显示,前面讲了,只有传正确的编码格式的才能正确显示。

 

4

然后想一下网页吧,网页中的utf-8格式,意思是说浏览器应该把他当做utf-8格式来进行解码,还有一点是浏览器应当将得到的汉字以utf-8传回给服务器。(其实仔细想想,编辑器神马地方都有的,哈哈)。所以用网页往数据库里面写东西,其实是相当于把utf-8格式的二进制数据(其实就是二进制)写到数据库里,然后读的时候读的是二进制,再按照到了浏览器这里,按照utf-8格式将其读出来。

 

所以只要不涉及显示,就可以不涉及编码!