在windows下编辑的记事本或者是其他的文件在linux中的vim,vi或者是cat这些命令下会出现乱码现象,自己深思了一下,对于一个文件乱码的出现无非是,这个文件存储时的编码和显示的编码冲突而导致的,所以我们很明确,在Windows下的普通编辑状态下保存文件的格式为gbk格式的简体中文编码,而linux下的读取编码默认是utf-8所以便出现冲突了
首先提供准备好了的U盘,其中存储了一些windows下编辑的文件
然后进行挂载,进入相关挂载文件,我的用的是ubunt10
用vim进入Mainwin.cpp文件
会发现,只要是中文的部分都乱码了,怎么解决这个问题呢!
这里讲解几个解决方案
第中方法就是完全不用动脑筋的
在命令行中用命令:
iconv -f gbk -t uft-8 Mainwin.cpp
你会发现如下如所示,没有乱码了
但是有一个问题就是这个命令是直接输出的
所以大家可以将它写入一个文件
iconv -f gbk -t utf-8 Mainwin.cpp > Main.cpp
这样大家在用vim Main.cpp打开这个文件编辑就会发现真的没有乱码了
第二种方法也是基本不需要懂什么脑筋的
用vim进入文件后执行:
:e ++env=gbk
这个命令是强制以给定的编码格式重新加载文件
接下来就不乱码了
第三种方法需要大家理解一下概念
首先要知道vim encoding(enc),fileencoding(fenc),fileencodings(fencs)是什么
encoding说的是内存中编码,就是程序读取文件会转换为encoding所指向的编码存在内存中
fileencoding则是文件编码
fileencodings所得是识别文件编码
当你打开一个文件时
首先从文件读入数据到内存,然后从fileencodings里依次使用各个编码来尝试转换为encoding。如果有一个成功,直接转换显示,否则就取encoding作为fileencoding。也就是说,这里有一个从fileencoding转换为encoding的过程。
当你保存一个文件
把内存的数据,从encoding,转换为fileencoding,然后写入文件。
所以这里我们也就解释了第二种方法
:e ++enc=gbk
为什么可以解决乱码问题,就是因为windows下的文件存储时gbk得,但是我们得fileencodings中没有对应的编码进行转换,所以乱码了
其中,我们可以通过
:set fencs
来查看fileencodings列表中已经有哪些编码
我的vim默认的fileencodings编码有如上几种,很显然没有gbk,所以怎么让这个fileencodings中有我们想要转换的编码呢
也许有人会直接说用
:set fencs=gbk,utf-8
,是的,没错,这样是直接设置了fileencodings但是对不起,你设置的是加载后的,对已经加载的没有丁点影响,所以要怎么办呢
直接用一下代码就可以了
touch ~/.vimrc vim ~/.vimrc set fencs=gbk,utf-8
就可以了