Linuxsky
中国青基会
您当前的所在的位置是:主页>自由文档>桌面应用> 文章页面

将 locale 从 zh_CN.GB2312 转到 zh_CN.UTF-8 的一些问题和解决方法

去论坛讨论 来源:linuxtoy 作者:Zhaojun 发布时间:2007-06-19

4、在 rxvt-unicode terminal 中实时改变 locale 设置
我所碰到的一个比较扰人的问题是,虽然现在日常的操作多数是在 UTF-8 的 locale 下进行的,但是很多时候我又需要一个基于 GB2312 的 rxvt- unicode 来跑原来的一些实验。简单的在一个现有的 rxvt-unicode session 下通过”export LC_CTYPE=zh_CN.GB2312″其实并不奏效。因为那只是告诉你的 bash 程序,此后的 locale 变成了 zh_CN.GB2312,而 rxvt-unicode 程序本身却依然工作在它启动时候的 zh_CN.UTF-8 的 locale 下。所以,即使改变了 bash 的 locale 设置,但如果在该 rxvt-unicode 中用 cat 或者 more 这样的命令来查看一个以 zh_CN.GB2312 的文件,依然看到是一堆乱码。
在这种情况下,一种不需要重新设置 X 系统的 locale,实时修改运行状态下的 rxvt-unicode 本身的 locale 设置的解决方案是使用 rxvt-unicode 内置的”escape sequence”来实现。
如下的 2 个命令组合,先更改 bash 的 locale 设置,然后通过”escape sequence”通知 rxvt-unicode 程序,现在这个 session 的 locale 设置已经被改成了 zh_CN.GB2312:

joseph@PeT43: ~ > export LC_CTYPE=zh_CN.gb2312; printf "\33]701;$LC_CTYPE\007"

这样,你就实时的得到一个 zh_CN.GB2312 的环境,可以对 zh_CN.GB2312 的文件进行正确的显式和操作了。
如果需要转回到 zh_CN.UTF-8 的模式,则可以通过如下的命令来实现:

joseph@PeT43: ~ > export LC_CTYPE=zh_CN.utf8; printf "\33]701;$LC_CTYPE\007"

当然,每次敲这么长的命令挺烦人的,我用的方法是把上面的这 2 个命令集合分别存成 .bash.gb 和 .bash.utf-8 两个文件,放到我的 home 目录。
如果我需要实时得到一个 GB2312 的 rxvt-unicode session,我就运行:

joseph@PeT43: somewhere > source ~/.bash.gb

如果我需要实时得到一个 UTF-8 的 rxvt-unicode session,我就运行:

joseph@PeT43: somewhere > source ~/.bash.utf-8

这样就省却了很多敲键盘或者 copy/paste 的时间。:)
这个方法是从 rxvt-unicodeFAQ 中学来的。这个”701″的 escape sequence 是 rxvt-unicode 对 xterm 的 escape sequence 的扩展,只在 rxvt-unicode 中有效。
[在 GNOME Terminal 里面可以通过菜单里面的”Terminal|Set Character Encoding”来实时更改 locale。]
5、VIM 配置文件的更新
我是一个 VIMmer,以下是一些我在 UTF-8 环境下的 vim 的配置:

set encoding=utf-8 " set default encoding as UTF-8
set fileencodings=ucs-bom,utf-8,cp936,latin1 " fileconding detection order
set termencoding=utf-8 " support Chinese display in rxvt-unicode

6、Misc
以下是一些小技巧,简单罗列在下面。
a. 在做编码转换的时候,如果你的源格式设定为 GB2312 的话,而且在转换成 UTF-8 的时候,发现程序会报“illegal input sequence at position xxxx”的错误。这是由于你之前的做的假定有问题。GB2312 是国标里面一个最小也是最早的中文编码标准。其中,只涵盖了 6,763 个汉字。所以你需要转换的文件的原始的格式可能并不是 GB2312 编码。这个时候,你可以用 GB18030 做为源格式来进行转换。GB18030 是最新的国家标准,包含了 27,564 个汉字,而且向下兼容 GB2312 和 GBK。
b.另外,支持 Unicode 且 Free 的中文字库我推荐使用”文泉驿“。这好像也是目前为止,唯一的一个以支持 Unicode 为出发点的 Free 的中文字库。

7、一些有用的参考:
a. Markus Kuhn 的”UTF-8 and Unicode FAQ for Unix/Linux“。最为详尽的 FAQ。
b. Unicode Home Page。Unicode 的官方网站。
c. A Quick Primer On Unicode and Software Internationalization Under Linux and UNIXEd Trager 提供的一个关于如何在 Linux 下使用 Unicode 的 tutorial,涵盖了一些我没有提及的内容。推荐阅读。
共2页: 上一页 [1] 2 下一页

免费注册 | 网站地图 | RSS订阅 | 友情链接 | 论坛交流 | 用户搏客 | 返回顶端

站内资料部分由本人收集整理,所有文章版权均系原作者和出版者所有,如涉版权问题,恳请来信告知!

本站原创作品除特别声明外皆以创作共用协议发布