linux的字符界面默认不支持中文,所以你显示中文和编辑中文往往会是乱码,今天小研究了一下。
首先要明白的问题是,乱码问题其实最本质就是编码和解码不符合。 比如你往linux上传了一个中文文件,但是用cat 或者 more去看的时候发现是乱码。这是因为你的中文文件编码可能是utf-8,可能是GBK等等,但是cat 和 more有可能是用什么ascii等去解码。 ok,这样自然会出现乱码了。 所以,遇到乱码问题我们要考虑的事情很简单,文件的编码方式是什么,你处理文件的解码方式又是什么。 网上有太多的关于乱码的解决方案,如果不了解本质只是一个方案一个方案的去尝试,很可能永远解决不了问题
ok,以我的例子来看。
我是用putty 登陆一个远程的centos 机器,在上面cat 或者 more 一个叫aa.txt的文件。 这个例子中最开始我也是遇到了乱码问题,但是仔细分析一下,解决方案很简单,首先弄清楚我的文件编码方式是什么,我的编码方式是utf-8. 因为这个文件我是用notepadd++特意保存成utf-8的,所以这一点毋庸置疑。 那么解码呢? 解码方是我的Putty软件,现在我只要让putty按照utf-8来解码就好了。 ok, go to putty-window-transalation 这里有个选项叫remote character set, 设置成utf-8. 现在你去cat aa.txt就是正常的中文了。
但是另外要注意的是,如果你用是screen 可能中文又不能正常显示了, 因为cat的结果可能会先被screen处理一下然后再发给putty。
如果你是用vi去编辑中文文件,有下面3个选项要注意
encoding 这个决定了vi缓存中的编码方式,也就是说你用vi打开一个文件的时候使用的编码。如果enconding是utf8 你就可以在vi打开文件后正常看到里面的中文字符
fileencoding 这个决定了 vi怎么看待它要处理的文件,如果fileencoding是ascii 那么vi在关闭文件的时候就会保存成ASCII
fileencondings 这个决定了 vi怎么辨认文件的编码方式,设置成fileencodings=utf-8,ascii,latted等 vi在打开文件的时候会先探测文件是不是utf-8 如果不是就继续探测是不是ascii 探测完毕把结果赋值给fileencoding
linux 中文乱码问题