文件编码

 

烦人的文件编码,尤其是从windows到linux的文件,回出现各种'乱码',幸好我们是在linux下,有强大的命令工具。

使用gedit,或者vim打开文件发现乱码,我们可以使用下面几个步骤来解决乱码问题:

一、查看文件编码

使用file命令

$ file -i test.txt
ISO-8859 text, with CRLF line terminators

使用的是ISO-8859的编码,而且是dos格式的文件,PS:CRLF(^M)表示是dos格式

二、转格式

这里由两种方法,

1. 使用命令iconv

iconv syntax
iconv -l 显示支持转的文件格式
iconv -f <本来格式> -t <想要的格式> input.txt > output.txt

但是iconv -l 显示中又没有ISO-8859

==========================科普线==========================

ISO-8859是一套字符集,如ISO-8859-1字符集==Latin-1,

但是由于ISO-8859是单字节编码,可能因为发达国家都使用,因此在很多协议上使用。本来是不存在双字节的汉字的,但是可以间接表示。

GB2312表示中文简体字,GBK包含GB2312还包括繁体中文和日文假名。

UTF-8采用可变长编码,有单字节、双字节、三字节

网上的例子:"中文"两个字,GB2312编码是"d6d0 cec4",Unicode编码为"4e2d 6587",可以用ISO-8859,"d6 d0 ce c4"传输。 比如一个文件采用ISO-8859存储,如下 3d 38 22 3a 44 35 我们可以使用gb2312来存储的话是3d38 223a 4435这样的话用gb2312来读取是没有问题的

我们可以简单的理解为,ISO-8859是基本单位,别的编码通过来转换 gb2312 <--> ISO-8859<--> Unicode

========================================================

我们可以通过gbk2312或者UTF-8格式来转换ISO-8859的文件,但从windous下写的文件,末尾都是CRLF line terminators结尾,所以我们使用gb2312

iconv -f gb2312(or gbk) -t utf-8 input.txt > output.txt

2. 使用 gedit,和vim等编辑器的另存为

三、CRLF(^M)

对于一般文件查看什么的没有问题,但是如果是程序代码就会有关系,运行到结尾发现不能解析就会中断

如果转换可以参看 dos2unix命令或者使用vim自带的命令,这个不是今天内容的重点,所以不继续说了。

 

 

ps: vim 配置中的encoding 和 fileencoding 区别 encoding是vim内部运作时所用的编码格式如buffer等

fileencoding是打开一个文件使用什么编码打开,可以写多个,它会一个一个去试

posted on 2013-12-24 14:29  嘿_我要走了  阅读(763)  评论(0编辑  收藏  举报

导航