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

时间:2022-08-31 05:05:03

在windows下编辑的记事本或者是其他的文件在linux中的vim,vi或者是cat这些命令下会出现乱码现象,自己深思了一下,对于一个文件乱码的出现无非是,这个文件存储时的编码和显示的编码冲突而导致的,所以我们很明确,在Windows下的普通编辑状态下保存文件的格式为gbk格式的简体中文编码,而linux下的读取编码默认是utf-8所以便出现冲突了

首先提供准备好了的U盘,其中存储了一些windows下编辑的文件

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

然后进行挂载,进入相关挂载文件,我的用的是ubunt10

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

用vim进入Mainwin.cpp文件

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

会发现,只要是中文的部分都乱码了,怎么解决这个问题呢!

这里讲解几个解决方案

第中方法就是完全不用动脑筋的

在命令行中用命令:

iconv -f gbk -t uft-8 Mainwin.cpp


你会发现如下如所示,没有乱码了

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

但是有一个问题就是这个命令是直接输出的

所以大家可以将它写入一个文件 

iconv -f gbk -t utf-8 Mainwin.cpp > Main.cpp

这样大家在用vim Main.cpp打开这个文件编辑就会发现真的没有乱码了


第二种方法也是基本不需要懂什么脑筋的

用vim进入文件后执行:

:e ++env=gbk



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

这个命令是强制以给定的编码格式重新加载文件

接下来就不乱码了

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

第三种方法需要大家理解一下概念

首先要知道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列表中已经有哪些编码

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

我的vim默认的fileencodings编码有如上几种,很显然没有gbk,所以怎么让这个fileencodings中有我们想要转换的编码呢

也许有人会直接说用

:set fencs=gbk,utf-8

,是的,没错,这样是直接设置了fileencodings但是对不起,你设置的是加载后的,对已经加载的没有丁点影响,所以要怎么办呢

直接用一下代码就可以了

touch ~/.vimrc
vim ~/.vimrc
set fencs=gbk,utf-8



就可以了

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