在不同的操作系统之间读取文件时时常会遇到编码格式的问题。目前Windows系统默认的编码格式为GB2312,而Linux默认使用UTF-8编码格式。在Linux系统中,可以通过enca命令来查看和转换文件的编码格式。可以用apt-get命令来获取enca软件包,其基本信息如下:
NAME:
enca -- detect and convert encoding of text files
SYNOPSIS:
enca [-L LANGUAGE] [OPTION]... [FILE]...
enconv [-L LANGUAGE] [OPTION]... [FILE]...
一般用法:
(1)enca FILE
查看文件的编码格式
(2)enconv FILE
将原文件转换为本地的默认编码格式
(3)enca -x TARFORMAT FILE
将原文件转换为TARFORMAT格式(覆盖原文件)
(4)enca -x TARFORMAT FILE2
将原文件(FILE1)转换为TARFORMAT格式存在FILE2中(不覆盖原文件)
(5)enca -L LANGUAGE -X TARFORMAT <FILE1> FILE2
将文件所使用的语言LANGUAGE作为参数
enca命令需要知道所需处理文件所使用的语言,这样可以正确地转换文件的编码格式。当使用命令没有明确给出待处理文件使用的语言时,enca命令会测试本地设置中的相关变量来判断待处理文件默认的使用语言。所测得的结果可能并不是文件所使用的语言,这会给文件的编码转换造成影响,因此在使用enca命令转换文件编码格式时应给出文件所使用的语言。其基本格式为:language_PLACE
,其中_PLACE
可省略。以下给出一些例子:(1)
简体中文(中国)zh_CN (2)
繁体中文(台湾地区)zh_TW (3)
繁体中文(香港)zh_HK (4)
英语(美国)en_US (5)
英语(英国)en_GB (6)
英语(加拿大)en_CA (7)
英语(澳大利亚)en_AU (8)
英语(印度)en_IN (9)
日语(日本)ja_JP (10)
法语(法国)fr_FR (11)
德语(德国)de_DE (12)
俄语(俄罗斯)ru_RU (13)
意大利语(意大利)it_IT
。
则可以如下使用enca命令:
enca -L zh_CN -x UTF-8 file2
另列出enca支持的语言及相应的8bit encodings(8bit编码)如下所示
语言 8bit encodings
Belarussian CP1251 IBM866 ISO-8859-5 KOI8-UNI maccyr IBM855
Bulgarian CP1251 ISO-8859-5 IBM855 maccyr ECMA-113
Czech ISO-8859-2 CP1250 IBM852 KEYBCS2 macce KOI-8_CS_2 CORK
Estonian ISO-8859-4 CP1257 IBM775 ISO-8859-13 macce baltic
Croatian CP1250 ISO-8859-2 IBM852 macce CORK
Hungarian ISO-8859-2 CP1250 IBM852 macce CORK
Lithuanian CP1257 ISO-8859-4 IBM775 ISO-8859-13 macce baltic
Latvian CP1257 ISO-8859-4 IBM775 ISO-8859-13 macce baltic
Polish ISO-8859-2 CP1250 IBM852 macce ISO-8859-13 ISO-8859-16 baltic CORK
Russian KOI8-R CP1251 ISO-8859-5 IBM866 maccyr
Slovak CP1250 ISO-8859-2 IBM852 KEYBCS2 macce KOI-8_CS_2 CORK
Slovene ISO-8859-2 CP1250 IBM852 macce CORK
Ukrainian CP1251 IBM855 ISO-8859-5 CP1125 KOI8-U maccyr
Chinese GBK BIG5 HZ
none
语言类型none包含的是非8bit编码,因此可以在文件为多字节编码时使用。
在Windows系统和Linux系统中,所使用的换行字符是不同的。一般而言,Windows系统中将CRLF(即^M$)作为换行符使用,而在Linux系统中使用的则是LF($)。对Windows系统下的txt文件使用enca命令可以看到如下信息:
Simplified Chinese National Standard; GB2312
CRLF line terminators
但是将UTF-8类型的文件转换为GB2312格式的文件后,使用enca命令结果为:
Simplified Chinese National Standard; GB2312
用enca命令将UTF-8类型文件转换为GB2312之后,换行符并没有跟着改变成CRLF,因此在Windows下打开转换后的文件时,所有的文字会变为一行,换行符已失效。换行符相关内容可参看http://www.cnblogs.com/yunf/archive/2011/04/20/2021830.html
中的文章。