字符编码

我使用的centos7,里面的软件多用utf-8编码,比如gnome-terminal。他的文本界面不支持中文,支持中文似乎要增加内核模块。

linux中用enca查看文件的编码方式,但有时也会出错(GBK编码方式),如果想确认文件编码方式,可以进入vim中,在命令行中输入 set encoding=gb2312 或者其他的编码方式,文档正确显示则编码方式就时相应的编码;也可以只输入 set fileencoding ,vim会输出文件的编码。

centos的gnome-terminal终端中默认的编码是utf-8,不能正常显示编码是gb2312、gbk、gb18030的汉字,使用luit转换编码的方式也不能正常显示。这三个编码都是中国的本地编码,gbk是对gb2312的扩展,gb18030是对gbk的扩展,和utf-8不兼容;转换时必须将其转换为unicode,再转换为utf-8,utf-8转换为gb2312也必须经过unicode。



vim 的字符编码设置选项有:


set encoding=utf-8            enc,vim内部的编码,包括内存数据和配置文件,默认为$LANG,没有则是latin1,编码应该和终端保持一致
set fileencodings=utf-8,gb2312,gbk,gb18030      fencs,打开文档时检测文件的编码类型,都不符合时默认使用encoding的设置项打开
set fileencoding=utf-8            fenc,编辑文件的编码
set termencoding=utf-8          vim工作的缓冲区的字符编码方式

具体查看:http://www.cnblogs.com/freewater/archive/2011/08/26/2154602.html

这样设置之后用vim编辑包含汉字的文档可以在终端正常显示了,因为他们都是utf-8编码。



文档编码转换:


使用vim转换:用vim打开文档,在底行模式中输入 set fileencoding=utf-8 就可以将gb2312文档转换为utf-8的文档了。

使用工具enca:
enca -L 当前语言 -x 目标编码 文件名    //语言zh_CN

使用工具转换enconv(常出错):
enconv -L zh_CN -x UTF-8 filename        gb2312转换为utf-8
iconv -f GBK -t UTF-8 file1 -o file2        utf-8转换为gbk



Linux 文件名编码转换:


原来在windows里的文件都是用GBK编码的,转换使用工具convmv。
convmv -f 源编码 -t 新编码 [选项] 文件名

常用选项:
-r 递归处理子文件夹
--notest 真正进行操作,请注意在默认情况下是不对文件进行真实操作的,而只是试验
--list 显示所有支持的编码
--unescap 可以做一下转义,比如把%20变成空格
 
注意:不要在NTFS和FAT文件 系统中使用此命令,否则可能产生意外结果,如果要在Linux 中正确的显示NTFS和 FAT的中文件名,可以通过mount参数来解决,具体方法查看一下man手册。



网页编码:


<meta http-equiv="content-type" content="text/html" charset="utf-8"/>
使用vim编辑的网页如果没有指定使用什么编码方式,firefox浏览器会默认使用gb2312,而如果网页文件保存的编码是utf-8则会出现乱码。在firefox中的设置方式是有一个字符编码的组件,可以设置firefox网页显示内容的编码,选择unicode就可以显示utf-8编码的网页了,但是建议在网页里直接指定网页显示的编码方式,这样浏览器会自动选择编码方式。对于使用utf-8和gb2312的区别,使用utf-8编码的文档占用的存储空间更大,但是兼容性更好,国际上通用的是utf-8。而gb2312则在国内用得很多。



编码方式


分为内码和交换码,内码用于计算机内部处理,交换码用于文件的交换,先将文将由内码转换为交换码,再将交换码转换为另一中编码的内码;ASCII将交换码作为内码使用,汉字编码的内码和交换码不同。

cp936            中文windows的默认编码
ucs-bom
utf-8
ucs-2
utf-16
utf-32
ucs-4
gb2312
gbk
gb18030
big5            即大五码,繁体汉字内码,是业界的标准,最新为big5-2003,被包含在交换码CNS11643的附表中。windows繁体版本的编码
CCCII            中文交换码
CNS11643        中文交换码



参考:


http://i.cnblogs.com/EditPosts.aspx?postid=4923980
http://www.2cto.com/os/201305/211266.html
http://bbs.csdn.net/topics/300038221
http://blog.csdn.net/fmddlmyy/article/details/372148
http://blog.csdn.net/ultrani/article/details/8432767

原文地址:https://www.cnblogs.com/little-snake/p/4923980.html