字符编码

Posted by 周思进 on November 3, 2019

字符编码介绍可以看阮一峰老师的字符编码笔记:ASCII,Unicode 和 UTF-8一文,看完之后对编码方式基本有个大概的了解。

但编码实现上,我还是不确定到底是个什么情况,所以直接动手写了两个程序。

直接在Notepad++上编辑的代码,一个事先设置好以ANSI格式编码,一个事先设置好以UTF-8格式编码。代码非常简单,就不贴出来了,就是printf输出打印中文字符“严”。

我是通过SecureCRT工具登入linux服务器分别执行了这两个编译后的可执行文件,以UTF-8格式编码的正常输出“严”子,而以ANSI格式编码的则输出的是乱码。

这说明代码以什么方式编码存储其执行结果在相同的环境下输出显示也会不一样,而输出显示肯定也是指定以某种编码方式来解读数据。

通过查看SecureCRT工具会话选项->终端->外观->字符编码的确设置的是UTF-8编码方式,如果设置成GB2312的,则上面输出显示结果就会反转过来。

不过如果你在linux下通过vim分别打开上述两个文件,你会发现,“严”字都是可以正常显示的,并没有其中一个是乱码,这是因为VIM的配置项起的作用。

可以打开~/.vimrc文件查看fileencodings设置,一般会设置了好几个编码方式,vim在打开文件时,就会依次通过设置中的编码方式来探测文件是何种编码方式,并将fileencoding设置成对应的编码方式。此时可以通过vim下输入命令set fileencoding来查看当前的编码方式。

因为平常都是在Source Insight工具编辑代码查看代码,有些源码文件就会发现中文是一堆乱码,现在终于是搞清楚了。有些开发人员是在linux服务器上通过VIM工具进行编程,使用的是UTF-8编码方式,而Source Insight显示乱码,就说明其不是UTF-8编码方式显示。

本来想查看下Source Insight上设置的编码方式是啥,但找了一圈都没有找到,最后确认是当前版本(SI 3.x)并不支持UTF-8编码方式。