Linux程序员必读:中文化与GB18030标准

原创 2004年10月19日 11:20:00
作 者: Leon

Linux的中文化是Linux真正在中国获得应用首先需要解决的问题。从Xteam推出世界上第一个中文Linux开始,中文化走过了本地化(Localization, L10N)到国际化(Internationalization, I18N)的发展路程,现在已经推出了可以流畅处理中文的Linux产品。

本地化,即L10N要解决的问题是如何将系统中的其它语言的信息转变为本地的文字。对于Linux而言,就是要让应用程序的界面、提示信息变成中文。国际化,即I18N解决的问题则是如何透明地处理各种语言文字,在不需要对应用程序做改动的前提下,能够显示、输入、处理各种语言。目前,I18N是解决世界上各种语言的处理的最好方式。

在Linux上实现I18N,所要做的工作是:

使Linux核心支持I18N

使glibc支持I18N。glibc是Linux系统中最底层的支持软件,通过glibc中提供的locale机制,应用程序能够实现I18N。

使XWindow支持I18N。Xwindow是Linux下最常用的图形界面系统,它采用了Xlocale机制为应用程序提供I18N支持。

使其它应用程序如Java、Mozilla支持I18N。Java、Mozilla等跨平台应用提供自己的I18N支持。


目前,除了Linux核心仍然不能进行各种语言文字的显示和输入,其它的部分能够比较好的支持I18N。
除了I18N,另一个影响Linux中文信息处理的关键是中文信息编码。在中国,中文信息编码由政府负责制定并监督实施。这是为了保证对于所有的系统中文的编码都是一致的,能够互相进行操作。从计算机的应用开始,我国已经颁布了多种中文信息编码标准,常用的是GB2312-1980,GB12345,GB13000(GBK),以及最新标准GB18030。值得一提的是,最新的GB18030标准将要作为强制标准实行,所有不支持GB18030标准的软件将不能作为产品出售。

从GB2312-1980编码开始,汉字都是采用双字节编码。为了与系统中基本的ASCII字符集区分开,所有汉字编码的每个字节的第一位都是1。例如:“啊”字的编码为0xB0A1。GB2312的汉字编码规则为:第一个字节的值在0xB0到0xF7之间,第二个字节的值在0xA0到0xFE之间。GB12345和GB13000是对GB2312-1980的扩充,所有已经包含在GB2312中的汉字编码不变,另外增加更多的码位。其编码规则大致为:第一个字节的值在0x81到0xFE之间,第二个字节的值在0x40到0xFE之间。由于GB13000是对GB2312的扩展,所以也被成为GBK。

GB18030也是对GB2312的扩展,其编码长度由2个字节变为1~4个字节。其中包括:

单字节,其值从0到0x7F

双字节,第一个字节的值从0x81到0xFE,第二个字节的值从0x40到0xFE(不包括0x7F)

四字节,第一个字节的值从0x81到0xFE,第二个字节的值从0x30到0x39,第三个字节的值从0x81到0xFE,第四个字节的值从0x30到0x39。


可以看出,GB18030的容量非常大,共有码位160万左右。另外,它与GB13000标准是兼容的。因此,所有基于GB13000设计的软件都能够不经修改运行在支持GB18030的系统平台上。
在Linux系统中,由于GB18030标准的复杂性,实现GB18030标准有一定的困难。但是,幸运的是,在广大Linux开发者的共同努力下,现在的Linux系统已经基本实现了GB18030标准:

在glibc中,已经有了GB18030的locale以及处理程序,应用程序可以正确识别并处理GB18030编码。

对于Xwindow,目前还没有Xfree86组织正式发布的GB18030支持。但是国内厂家已经积极的参加了其中的工作。例如,在最新的XteamLinux4.0中,不但包括了支持GB18030的Xwindow系统,常用的KDE和GNOME系统目前也已经支持GB18030。在KDE中甚至可以直接将GB18030的文件打印出来。另外,XteamLinux4.0中还包括了最新的支持GB18030的中文输入法。

其它应用程序方面,由于Java的代码相对封闭,对于GB18030的支持还不清楚。但是由于Java内部采用Unicode作为编码,支持GB18030应该不成问题。Mozilla的GB18030支持采用了自己的专有方式:将GB18030分为2字节和4字节两种编码,分别加以支持。但是它的这种支持方式还需要一些额外的程序配合。目前,XteamLinux4.0中的Mozilla已经能够正确处理GB18030编码,例如自动显示一个GB18030编码的网页。


关于GB18030的实现其实包含了许多的细节,更多详细的内容可以参考GB18030标准文本。

摘自:蓝森林

GB2312,GBK,GB18030,UTF8四种汉字编码标准有什么区别和联系

从GB2312、GBK 到 GB18030,这些编码方法是向下兼容的,即同一个字符在这些方案中总是有相同的编码,后面的标准支持更多的字符。在这些编码中,英文和中文可以统一地处理。区分中文编码的方法是高...
  • wanglei9876
  • wanglei9876
  • 2015年07月07日 17:14
  • 1349

[转]linux下文件编码格式转换方法(gb18030/utf-8)

转自:http://blog.csdn.net/ccf19881030/article/details/17792109 在Linux做开发或者系统管理遇到乱码是经常的事情,主要window...
  • hailmy
  • hailmy
  • 2015年11月06日 09:11
  • 1479

eclipse的中文化

解压缩eclipse-SDK-3.0.1-win32.zip到E:/eclipse3.0.1解压缩NLpack-eclipse-platform-SDK-3.0.x-win32拷贝features和p...
  • wldandanpig
  • wldandanpig
  • 2005年03月27日 13:44
  • 705

linux下文件编码格式转换方法(gb18030/utf-8)

文章转载自  http://www.firekyrin.com/archives/249.html linux下文件编码格式转换方法(gb18030/utf-8) 在Linux做开发或者系统管理遇...
  • ccf19881030
  • ccf19881030
  • 2014年01月03日 15:50
  • 8182

UTF-8 vs GB18030,共存还是对抗?

  在讨论这个问题之前,我想应该先给本文的标题(UTF-8 vs GB18030,共存还是对抗?)加一个限定条件:在中国,即在中国UTF-8 vs GB18030,共存还是对抗?为了更清楚的理解...
  • zhuang622
  • zhuang622
  • 2009年11月25日 17:40
  • 2878

Linux的中文化

这两天都在折腾Linux下的中文化的问题。在网上找到些资料很有用,放在这里共享一下。http://www.linuxaid.com.cn/engineer/hubertzou/http://www.l...
  • CunningBoy
  • CunningBoy
  • 2005年12月06日 16:44
  • 831

linux c++下gb18030、utf8之间的转换

int CHostFunc::ConverCode( const char * fromCode, //源字符编码名(gb180...
  • lifang123456
  • lifang123456
  • 2015年08月21日 09:43
  • 1833

GB2312、GBK、GB18030 、UTF-8、Unicode、ASCII这几种字符集的主要区别是什么?

很久很久以前,有一群人,他们决定用8个可以开合的晶体管来组合成不同的状态,以表示世界上的万物。他们看到8个开关状态是好的,于是他们把这称为”字节“。再后来,他们又做了一些可以处理这些字节的机器,机器开...
  • sinat_37390744
  • sinat_37390744
  • 2017年02月21日 21:38
  • 287

中文编码标准GB2312, GB18030的下载地址

中文编码标准GB2312, GB18030的下载地址:  GB13000的下载地址: http://dbsvr.ynst.net.cn:6006/jsjpdf/GB13000.1-1993.pdf  ...
  • ChengZi
  • ChengZi
  • 2005年03月02日 12:12
  • 5778

GB2312, GBK, GB18030 这几种字符集主要的区别是什么?

早期的计算机使用7位的ASCII编码,为了处理汉字,程序员设计了用于简体中文的GB2312和用于繁体中文的big5。  GB2312(1980年):16位字符集,收录有6763个简体汉字,682个符...
  • xueshandugu
  • xueshandugu
  • 2014年03月25日 22:37
  • 1632
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Linux程序员必读:中文化与GB18030标准
举报原因:
原因补充:

(最多只允许输入30个字)