LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1992|回复: 6

做程序用UCS2好还是UCS4好呢?

[复制链接]
发表于 2005-4-5 16:01:47 | 显示全部楼层 |阅读模式
QT是UCS2的。但是wchar_t是UCS4,相应的字符串库函数 wcslen() 等,都是UCS4。
Windows 2000 是 UCS2 ......

怎么办呢?
应该选择哪一个来开发跨平台程序呢?
发表于 2005-4-5 16:49:58 | 显示全部楼层
Unicode 编码字符集利用了一个由 128 个三维的组构成的四维编码空间。其中每个组包含 256 个二维平面。每个平面由 256 个一维的行组成,并且每个行有 256 个单元。每个单元在这个编码空间内对一个字符编码,或者被声明为未经使用。这种编码概念被称为 UCS-4;四个八位元用来表示指定组、平面、行和单元的每个字符。

第一个平面(第 00 组的第 00 平面)是基本多语言平面(Basic Multilingual Plane,BMP)。BMP 按字母、音节、表意符号和各种符号及数字定义了常规使用的字符。后续的平面用于附加字符或其它还没有发明的编码实体。我们需要这完整的范围去处理世界上的所有语言;特别是拥有将近 64,000 个字符的一些东亚语言。

BMP 被用作双字节的编码字符集,这种编码字符集确定为 ISO 10646 UCS-2 格式。ISO 10646 UCS-2 就是指 Unicode(并且两者相同)。BMP,像所有 UCS 平面那样,包含了 256 行,其中每行包含 256 个单元,字符仅仅按照 BMP 中的行和单元的八位元在单元中被编码。 这就允许 16 位编码字符能够被用来书写大多数商业上最重要的语言。UCS-2 不需要代码页切换、代码扩展或代码状态。UCS-2 是一种将 Unicode 结合到软件中的简单方法,但它只限于支持 Unicode BMP。

所以说,实际是一个概念。
回复 支持 反对

使用道具 举报

发表于 2005-4-5 16:58:23 | 显示全部楼层
但在bits/wchar.h中发现,__WCHAR_MAX定义为21474836471,所以gcc还是采用了双字的表示,还是使用了Unicode标准型,也就是ucs4啊。
回复 支持 反对

使用道具 举报

发表于 2005-4-5 21:17:17 | 显示全部楼层
呵呵,楼上的回答得挺详细。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-4-6 09:45:32 | 显示全部楼层
“所以说,实际是一个概念。”
这不仅仅是一个概念。这里会遇到输出存储,数据传输的问题。不同平台的应用程序需要遵循同样长度的wchar,否则无法进行数据交换。既然会遇到不同平台的应用程序(可能是同一个软件的不同平台的版本) 的数据交换的问题,就要考虑统一协议,也要考虑将来的发展的问题。如果将来都要发展成UCS4,但是我现在选择了UCS2,那么,将来又要大动干戈了。 既然这样,就要考虑现在就是用UCS4。

但是,如果先辈们研究得出结论,对于一般日常应用,应该使用UCS2,对于考古、科学等才有必要使用UCS4, 这样,我自然要选择UCS2。
回复 支持 反对

使用道具 举报

发表于 2005-4-6 09:52:56 | 显示全部楼层
你的想法想实现二进制上的兼容,那是很难的。
但是如果要实现源代码上的兼容,定义为wchat_t不就行了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-4-6 11:34:22 | 显示全部楼层
如果是孤立程序,我就不发愁了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表