ubuntu下一个乱码问题引起的思考和学习

来源:互联网 发布:大战神坐骑进阶数据 编辑:程序博客网 时间:2024/05/17 23:13

        在这个链接:http://ishare.iask.sina.com.cn/f/23896156.html?retcode=0下载了一个rar压缩文件--《NS2仿真实验》的源代码,使用sudo apt-get install unrar,下载这个解压缩工具,解压缩之后出现了乱码。找了下,可以用iconv命令来转换格式,一般windows下的编码格式为gbk,我就是使用:

iconv -f gbk -t utf-8 lab3.tcl
#lab3.tcl是压缩包中的一个乱码文件。
打开文件依然是乱码,这时还是没有想到是字符编码的问题(对这块不太熟)。

听同学说ark这个软件解压缩不会出现乱码,但依然出现了乱码,倒是无意可以打开文件,如图:


      从图片可以看出字符的编码方式是繁体字,BIG5格式。这样,就知道了格式,使用命令转换一下,就可以轻松解决问题:

iconv -f big5 -t utf8 lab3.tcl

     接着解决问题:

1.由于是整个压缩文件基本全是乱码,所以需要全部转换,批处理可以使用shell脚本(自己还没学好,囧),等会了再补上。

 2.如何知道原来的编码方式是big5?百度了一下,可以使用file 文件名,查看文件的信息。

    百度了一下,找到了一个比较好用的傻瓜式命令:enca(没有安装的,先使用sudo apt-get install enca,来安装)。该命令可以查看文件编码方式,可以转单个文件的格式,也可以转整个目录下的文件的格式。其使用方式如下:

enca -L zh_CN file #检查文件的编码enca -L zh_CN -x UTF-8 file  #将文件编码转换为"UTF-8"编码enca -L zh_CN -x UTF-8 < file1 > file2  #将文件编码转换为"UTF-8"编码,创建新的文件来保存enca -L zh_CN -x utf-8 * #将目录下的文件全部转成UTF-8格式,并覆盖原文件


下面是自己的关于字符编码的一些学习。关于字符编码的历史和规则可以参见:

http://www.cnblogs.com/skynet/archive/2011/05/03/2035105.html。

http://blog.csdn.net/stilling2006/article/details/4129700

常见字符集名称:ASCII字符集、GB2312字符集、BIG5字符集、GB18030字符集、Unicode字符集等。

英文字符不是象形字符,用一个字节足以表示,实际ASCII只用了128个(7位),但表示有限,只能表示基本的26个拉丁字母,欧洲标准EASCII对此做了扩展,使用8位,可以表示更多的欧洲常用字符。

当中国有了计算机之后,中文以及东亚其他地方的语言是象形文字,常用字符多达上千个,自然就想到了用双字节来编码(大概就是一个94*94的数组,数组里面放汉字,可以通过数组的下表来找到对应的汉字?),把在ASIC中的字符也编进去了,这就是说的“全角”字符,而在127号以下的字符就是“半角”字符了。GB2312基本满足了汉字处理的需求,但一些人名、古汉语中的罕见字不能表示,这就导致了后面GBK字符集的出现。

编码GB是指国标(当然只中国的标准),GBK是国标扩展的意思,GBK向下兼容GB2312,向上支持ISO 10646.1标准,也采用双字节表示,总体编码范围是0x8140-0xFEFE,首字节在81-FE,尾字节在40-FE之间。

BIG5是针对繁体汉字的汉字编码,在香港、台湾和澳门等地区通用,在2003年才获得了比较正式的地位,最新版本是:BIG5-2003。

ISO-2022CJK编码:是国际标准组织为各种语言制定的编码标准,双字节编码,汉语是CN,日语和韩语分别是JP和KR,合在一起就是CJK码。

这样就出现了一个字节表示一个字符还是半个字符的问题。Unicode(Universal code,通用码)的诞生就是为了解决这个问题,Unicode是宽字节字符集,所有的字符均固定的采用双字节表示。可以这样理解,unicode是字符集,UTF-8、UTF-16(2个字节)、UTF-32(4个字节)是编码方式。关于字节存储,不同的操作系统又存在大端存储和小端存储的区别。UTF-8是一种针对unicode的可变长度字符编码(定长码)。UTF-8不再存在字节顺序的问题。

原创粉丝点击