宽字符数据表示法

开发宽字符码是为了多字节字符可以在系统内部更有效的得以处理。 多字节字符表示被转换为统一的内部表示(宽字符码),这样在内部所有字符都具有相同的长度。 通过使用这种内部形式,就可以用代码集无关的方式进行字符处理。 宽字符码就是指字符的这种内部表示。

wchar_t 数据类型用来表示字符的宽字符码。 wchar_t 数据类型的大小特定于实现。 它是一种 typedef 定义,可在 ctype.h stddef.hstdlib.h 文件中找到。 任何程序都不应为 wchar_t 数据类型假设一个特定的大小,应使程序可运行于各种使用不同 wchar_t 数据类型大小的实现中。

在 AIX® 操作系统上, wchar_t 数据类型在 64–bit 环境中为 32–bit ,在 32–bit 环境中为 16–bit 。 语言环境方法已标准化,这样在大多数语言环境中,为某一特定字符而存储在 wchar_t 中的值将总是和该字符的 Unicode 数据值相同。 对于打算仅在 AIX上运行的应用程序,它允许某些应用程序以一致的方式处理 wchar_t 数据类型,即使底层代码集未知也是如此。 除了 IBM-eucTW 代码集外,所有的语言环境都使用 Unicode 作为各自的宽字符代码值(进程代码)。 IBM-eucTW 代码集(LANG =zh_TW)包含了很多 Unicode 标准中未包含的字符。 因此,不可能用 Unicode 宽字符值来表示这些字符。 需要使用基于 Unicode 的 wchar_t 数据来表示繁体中文的应用程序必须换用 Zh_TW 语言环境(big5 代码集)。

不要假设 char 数据类型是有符号,也不要假设是无符号的。 有无符号随平台而定。 如果所用的特定系统将 char 定义为 signed(有符号),那么全 8 位量的比较会产生不正确的结果。 当全部 8 位都用来编码一个字符时,请确保必要时将 char 声明为 unsigned char(无符号 char)。 同样请注意,如果 signed char 值被用作数组的下标,那么可能会产生不正确的结果。 为了使程序具有可移植性,请将 8 位字符定义为 unsigned char