您的位置:首页 > 运维架构 > Linux

解决linux下WINDOWS下记事本乱码问题

2016-05-21 11:25 274 查看
在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


就可以了

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: