李宁
摘 要 本文讨论了在Windows和Linux平台下进行GB2312、Unicode和UTF8互相转换的方法,并用C++分别给出了这两个平台的转换实例,同时以编码转换为例,讲解了如何在Windows和Linux下使用C++开发跨平台的程序库。
关键词 GB2312,UTF8,Unicode,编码转换,跨平台
一、 引言
由于Internet诞生在美国,最初只能通过Internet传输简单的文本,而且这些文本必须是英文的。造成这种情况的原因是由于当初的Internet是通过标准的AscII传输数据,而标准的AscII的取值范围是从0至127,只能表示英文大小写字母以及一些常用的符号。但随着连入Internet的国家越来越多,而这些国家几乎都有自己的语言体系,因此,这就需要有新的编码方案来解决不同语言体系如何在计算机中表示的问题。经过很多年的发展和演化,现在世界上已出现数百种满足各个国家语言的编码方案,其中Unicode和UTF8是最为常用的两种编码方案,对于中文而言,GB2312也会经常被用到。不同的编码方案虽然可以很容易地表示各种符号,但这也给使用它们的人带来不便。如通过TCP下载一个中文网页,并分析其中的中文信息,但是由于这个网页是通过UTF8来编码的,在使用时必须将其转换为GB2312或其他支持中文的编码方案。虽然不同的操作系统平台提供了相应的API来实现编码转换,但这些API因平台而异,在调用时必须要考虑平台之间的差异,这给C++的程序设计带来了不便,并且使程序难以维护。因此,需要实现一个可以跨平台调用的C++程序库,使得在各种平台上的调用代码完全一样,这样就可以避免在使用C++进行跨平台编码转换时考虑各种操作系统平台的差异,从而使代码更容易维护。
二、 Unicode和UTF8简介
Unicode是对AscII的扩展。AscII采用一个字节表示,而Unicode目前主要有两种表
示方法.
1. 采用2个字节表示一个字符,即UCS2。如果这个字符是标准的AscII,第一个字节
是0,而第二个字节就是这个AscII的值,如果表示双字节的字符,可从Unicode对照表中查找相应的Unicode编码。
2. 采用4个字节表示一个字符,即UCS4。UCS4在大多数操作系统中都未使用(在
Windows 2000及以后版本中的Unicode采用的是UCS2,而不是UCS4),即便使用,前两个字节也是0,只有后两个字节表示实际的数据。UCS4之所以要用4个字节,是为了扩展的需要。
|