Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1087170
  • 博文数量: 321
  • 博客积分: 7872
  • 博客等级: 少将
  • 技术积分: 2120
  • 用 户 组: 普通用户
  • 注册时间: 2007-05-16 09:06
文章分类

全部博文(321)

文章存档

2017年(1)

2016年(1)

2015年(12)

2014年(17)

2013年(78)

2012年(15)

2011年(17)

2010年(67)

2009年(102)

2008年(11)

分类: LINUX

2013-04-17 10:25:38

来源地址:http://blog.chinaunix.net/u/14721/showart.php?id=104645

GB2312/GBK/GB18030转UTF8全攻略(v0.3 非最终版本 )

tx-cary 文
版本v0.4
创建日期2006年04月25日
最后修改2006年05月31日

要说明的是,由中文的locale转UTF8是一个痛苦的过程,经过这个过程,你会得到一些东西,但也会失去一些东西;你会得到一些便利,但也会带来一些麻烦。

首先介绍一下GB编码格式和UNICODE编码格式。所谓“GB”,也就是国标,国家标准的意思(非国际标准)。最早的国家文字编码标准是GB2312,包括一级字库和二级字库,一级字库包含2312个汉字,也就是最常用的汉字。GB2312包含的文字大约有5000多个,据说是以涵盖《毛主席语录》所有汉字为标准的。这个标准是目前在中国大陆使用最广文字编码。GBK是后来在GB2312的基础再加入了许多汉字,更为完善,可以说基本包含现代汉语的所有文字。GB18030是新出台的国家标准,向下兼容GBK和GB2312,这也是目前中国政府强制执行的标准,所有在中国上市的操作系统都必须支持此编码。这个编码不仅包含简体和繁体汉字,还包含了日韩文字和少数民族的文字。而UNICODE是国际标准,是为了统一世界上无数的编码而设计的,是ASCII码的传承。也就是说它包含ASCII码以及世界各地各种文字的编码。在中文方面,其涵盖了GBK编码的中文字符。UNICODE按照存储空间的不同又分为UTF-8/UTF-16/UTF-32等等。现在使用最广的是UTF-8。 值得注意的是,并不是说我用了某种编码,此编码支持的文字都能显示。这还依赖于系统所用字体。到目前为止,还没有一款能够真正支持GB18030和UTF8标准所有字符的字体(工程太浩瀚了)。

使用UTF-8的好处:
1、国际化。UNICODE是一个趋势,有点“世界大同”的意思。比如大陆人和台湾人交流,他们用BIG5我们用GBK,文档就不能交互了。这样如果大家都用UNICODE,交流就没有障碍了。
2、现在很多国际化的软件、网站等都是用UNICODE作为编码方式,这样就不用为各地方不同的编码方式考虑兼容问题。比如QT程序,比如XML脚本,电骡,都是UNICODE编码的。amarok打算在其1.4版本中取消对其它编码的支持,只支持UNICODE了。
3、WindowsXP等主流操作系统都支持UNICODE。WindowsXP这点做得很好,即支持GB18030,又支持UNICODE,这样就不用害怕UNICODE的文件在Windows下无法识别。

使用UTF-8带来的麻烦:
1、在中国还不普及。GB2312在中国可算是根深蒂固,它为中国的计算机和通信事业做出了卓越的贡献。现在大多数FTP、MP3、文本文档、网页都是GB系列的编码,如果使用UTF-8的locale,就会出现乱码,要进行转换。
2、中国政府在推GB18030,好像对UNICODE并不是很感冒。
3、UNICODE支持的中文不如GB18030多。
4、Linux下部分软件不支持UNICODE,特别是控制台下的(比如我们伟大的文件管理器Midnight Commander,还有中文终端zhcon)。

默认编码是UNICODE的Linux发行版有(我所知道的,不多,不好意思啊): Fedora、Mandriva
默认支持GB18030的Linux发行版:红旗、Magic

因此转不转LOCALE你得自己考虑清楚,好在转LOCALE是可逆的,转了后觉得不爽还可以转回来。

转locale主要要做的几件事情:设置LOCALE相关变量和环境、转文件名编码、转文本文件编码、转mp3的ID3。下面我就一一介绍转换方法。

1、设置LOCALE相关变量和环境对于ArchLinux来说,只需要更改/etc/rc.conf中LOCALE字段的值为zh_CN.utf8即可。其它发行版可以修改引导脚本,添加一句 export LANG=zh_CN.utf8

2、转文件名编码对于Linux的文件系统,如ext3、reiserfs等,原来在GB系列环境下的中文文件名需要转换成utf8编码。可以用convmv这个软件进行转换。命令格式如下: convmv -f gb2312 -t utf8 -r --notest * 执行这个命令之前需要考虑清楚,回车按下去之后你的所有文件名都变成utf8存储了。当然,你也可以变回来: convmv -f utf8 -t gb2312 --notest * 对于windows文件系统,如vfat和ntfs,只需要在挂载时加入utf8参数即可,命令如下: mount /dev/hda1 /mnt/hda1 -o utf8 或者 mount /dev/hda1 /mnt/hda1 -o iocharset=utf8

3、转文本文件编码可以使用这个命令--iconv。命令格式如下: iconv -f gb2312 -t utf8 文件名

4、转mp3的id3 这是一个最痛苦的过程。网络上下载的mp3编码方式千奇百怪,什么都有。有ASCII的、有GBK的、有BIG5的、有UNICODE。而且mp3的id3还有许多版本,有ID3v1的,ID3v2.3的,ID3v2.4的。还有同时拥有ID3v1和id3v2的,晕吧。其中只有ID3v2.4支持UNICODE,我们要做的工作就是将所有乱七八糟的编码全部转换成ID3v2.4 UTF-8。论坛中有人写了一个Linux下的脚本,依赖mutagen的,在本文的附件可以下载。运行: find MY_MUSIC_DIR/ -type f -exec id3iconv -e GBK --remove-v1 {} + 可以进行转换。据说easytag、eyeD3、id3iconv也可以转,但是我实际使用效果都不怎么样。因此这个工作也可以在Windows下完成。Windows下推荐两个软件可以很好的实现此功能的:convertz和千千静听。convertz是专门转码的工具,显得更专业一些。千千可以用其批量改id3的功能进行更改,但是不太稳定,容易崩溃。

5、Midnight Commander 转了locale之后,我们最大的损失就是Midnight Commander了。这个损失让我至今郁闷不已。因为在Linux我已经习惯了控制台下的mc作为文件管理器了。有一个比较差强人意的解决方案,那就是重新编译mc,加入utf8补丁。在Archlinux的AUR中有mc-utf8的PKGBUILD,这个包依赖slang-utf8,也就是打过utf8补丁的slang,在AUR也可以找到。两个软件分别编译后就可以使用mc了,比原来GB2312下的中文支持还好些,但是启动速度奇慢,我也不知道是什么原因。

6、wine 转了locale后,wine加载程序超慢。原因是wine会按照locale去查找字体,由于没有UTF8的字体,它就会挨个编码去找字体,导致运行缓慢。如果你不幸已经运行了wine程序,整个系统大概就会像蜗牛一般了吧。不要着急,在控制台下输入 killall wineserver 即可杀死wine程序。解决方法是,运行wine程序时加上env参数,如这样: env LANG=zh_CN wine 程序.exe

7、Opera字体变得模糊 Opera字体模糊的原因有许多,如果是因为转变LOCALE导致的,那解决方法就是将“语言”选项设置为 zh-cn 即可。

8、与windows共享中文文件名文件的方法:首先,挂载windows共享目录应该使用如下命令:
smbmount //192.168.0.1/share /mnt/smb -o iocharset=utf8,codepage=cp936,username=user,password=1234
其次,让windows访问共享文件需要设置samba服务器。修改smb.conf文件,将这几个字段这么设置:
dos charset = cp936
display charset = UTF8
unix charset = UTF8

转自:

阅读(1476) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~