本节描述宽字符和字符串输入输出的功能、字符分类和简体中文字符集的转换功能。Solaris 2.7 软件实现了一个宽字符库,用于根据行业标准处理简体中文字符代码。
具有中文语言特定依赖项的例程在它们自己的语言特定库中,该库通过相应的 C 编译器选项链接。简体中文 Solaris libcle 通过 -lcle 链接
有关更多信息,请参考相应的 man 页。
亚洲版 Solaris 软件将 WC 定义为定常宽度的四字节代码。WC 使用 ANSI C 数据类型 wchar_t, Solaris 软件在 wchar.h 中将该类型定义为:
typedef long wchar_h;
在 Solaris 软件中,long 是四字节的数据类型。
本节中介绍的转换功能都可用,但您应使用 iconv() 作为标准功能。
简体中文 Solaris 软件提供了用于各种转换的公用程序,例如:
一个编码集中的字符转换,例如将 ASCII 大写字母转换成小写字母。
国家标准字符集的不同规范之间的转换,例如 GB 和 EUC 之间的转换。
代码格式之间的转换(例如在 EUC 和 WC 之间转换)。
使用通用多字节转换公用程序的程序应该包含头文件 widec.h 和 wctype.h。zh/xctype.h 中声明了简体中文 Solaris 特定的例程(如 iscxxx )。
使用通用多字节转换公用程序的程序应该包含三个头文件: wctype.h、widec.h、和 zh/xctype.h。
locale/xctype.h 头文件声明与中文语言环境特定的例程,这些例程的名称具有相同的形式 isc xxxx:
与前一节中介绍的分类功能一样,这些功能的使用会受 setlocale 功能的控制(本章的其他地方和其他章节将介绍此功能)。
语言环境特定的转换例程(如中文 cgbtoeuc )包含在 libcle 库中:
编译时通过 C 编译器选项 - lcle 可链接该库。
多字节转换功能类似于单字节转换功能 toupper 和 tolower。 这些功能将宽字符转换成其他宽字符。有关转换例程的更多信息,请参见 wconv(3) 和 cconv(3) 的 man 页。
以下例程在常规中文 C 库中:
表 A–3 简体中文大小写转换功能(在 zh/xctype.h 中声明)
功能 |
说明 |
---|---|
tocupper |
将编码集 1 中的小写罗马字母转换成大写字母 |
toclower |
将编码集 1 中的大写罗马字母转换成小写字母 |
简体中文字符集中,编码集 0 里的罗马字符和数字在编码集 1 里重复出现。以下功能测试宽字符。
表 A–4 简体中文编码集转换功能
功能 |
说明 |
---|---|
atocgb |
将 ASCII(编码集 0)中的字母或数字字符转换成相应的 GB-2312-80(编码集 1)中的字符。 |
cgbtoa |
将 GB-2312-80(编码集 1)中的字母或数字字符转换成相应的 ASCII(编码集 0)中的字符。 |
有关这些功能的更多信息,请参见 cconv() (3x) 的 man页。
以下例程对 GB-2312-80 字符集进行基于字符的代码转换。它们在 EUC 格式和 GB-2312-80 格式之间转换字符和字符串。要使用这些例程,必须使用 C 编译器选项 -lcle 链接库 lib cle。 有关更多信息,请参见 cconv (3x) 手册页。
表 A–5 简体中文基于字符的功能
功能 |
说明 |
---|---|
cgbtoeuc |
将一个字符从 GB-2312-80 格式(7 位)转换成 EUC 格式 |
scgbtoeuc |
将一个字符串从 GB-2312-80 格式(7 位)转换成 EUC 格式 |
sncgbtoeuc |
将一个字符串的一部分从 GB-2312-80 格式(7 位)转换成 EUC 格式 |
euctocgb |
将一个字符从 EUC 格式转换成 GB-2312-80 格式(7 位) |
seuctocgb |
将一个字符串从 EUC 格式转换成 GB-2312-80 格式(7 位) |
sneuctocgb |
将一个字符串的一部分从 EUC 格式转换成 GB-2312-80 格式(7 位) |