本章包含有关使程序与早期亚洲版 Solaris 软件向后兼容的信息。描述的每个实用程序都得到支持。对于此版本的 Solaris,鼓励您使用《国际化语言环境指南》中描述的 XPG4 国际化 API。
这些实用程序测试简体中文 (GB-2312-80) 国家标准字符集的各个方面。它们还假定被测试的字符是国家标准字符集的一部分。
下列各表中函数的参数必须是 WC wchar_t 中的字符。有关更多信息,请参见 cctype(3x) 手册页。
表 12–1 简体中文字符分类函数
例程 |
说明 |
---|---|
ischanzi |
如果它是 GB-2312-80 中的汉字,则返回 true。 |
iscaccent |
如果它是 GB-2312-80 中的重音符号,则返回 true。 |
iscphonetic |
如果它是 GB-2312-80 中的语音符号,则返回 true。 |
iscpinyin |
如果它是 GB-2312-80 中的拼音符号,则返回 true。 |
iscalpha |
如果它是 GB-2312-80 中的罗马字母,则返回 true。 |
iscdigit |
如果它是 GB-2312-80 中的罗马数字,则返回 true。 |
iscnumber |
如果它是 GB-2312-80 中的数字,则返回 true。 |
isclower |
如果它是 GB-2312-80 中的小写罗马字母,则返回 true。 |
iscupper |
如果它是GB-2312-80 中的大写罗马字母,则返回 true。 |
iscblank |
如果它是 GB-2312-80 中的空白字符,则返回 true。 |
iscspace |
如果它是 GB-2312-80 中的空格字符,则返回 true。 |
iscgen |
如果它是 GB-2312-80 中的图形符号或通用符号,则返回 true。 |
iscsci |
如果它是 GB-2312-80 中的科学记数符号,则返回 true。 |
iscline |
如果它是 GB-2312-80 中的格线符号,则返回 true。 |
iscunit |
如果它是 GB-2312-80 中的单位字符,则返回 true。 |
iscparen |
如果它是 GB-2312-80 中的右括号或左括号,则返回 true。 |
iscpunct |
如果它是 GB-2312-80 中的标点符号,则返回 true。 |
iscgreek |
如果它是 GB-2312-80 中的希腊字符,则返回 true。 |
iscrussian |
如果它是 GB-2312-80 中的俄文字符,则返回 true。 |
iscspecial |
如果它是 GB-2312-80 中的希腊字符或俄文字符,则返回 true。 |
ischira |
如果它是 GB-2312-80 中的日文平假名字符,则返回 true。 |
isckata |
如果它是 GB-2312-80 中的日文片假名字符,则返回 true。 |
另有两个用于简体中文的例程,即 iscgb 和 isceuc。它们测试 GB-2312-80 字符集中的字符。iscgb 例程需要宽字符,而 isceuc 需要 EUC 格式的 GB-2312-80 字符。有关更多信息,请参见 cctype (3x) 手册页。
表 12–2 简体中文通用字符分类函数
例程 |
说明 |
---|---|
iscgb |
如果它是 GB-2312-80 中的字符,则返回 true。 |
isceuc |
如果它是 GB-2312-80 中的 EUC 格式字符,则返回 true。 |
本节描述宽字符和字符串输入输出函数、字符分类函数和简体中文字符集的转换函数。Solaris 2.7 软件实现了一个宽字符库,用于根据行业标准处理简体中文字符代码。
对中文语言有特定相关性的例程在它们自己的特定语言库中,此库通过相应的 C 编译器选项链接。简体中文 Solaris libcle 使用 -lcle 链接。
有关更多信息,请参考相应的手册页。
亚洲版 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。简体中文 Solaris 的特定例程(例如 iscxxx)在 zh/xctype.h 中声明。
使用通用多字节转换实用程序的程序应该包含三个头文件:wctype.h、widec.h 和 zh/xctype.h。
locale/xctype.h 头文件声明与中文语言环境特定的例程,这些例程的名称具有相同的形式 isc xxxx:
与前一节中介绍的分类功能一样,这些功能的使用会受 setlocale 功能的控制(本章的其他地方和其他章节将介绍此功能)。
特定于语言环境的转换例程(例如中文 cgbtoeuc)收集在 libcle 库中:
编译时通过 C 编译器选项 -lcle 可链接此库。
多字节转换函数与单字节转换函数 toupper 和 tolower 类似。这些函数将宽字符转换成其他宽字符。有关转换例程的更多信息,请参见 wconv(3) 和 cconv(3) 手册页。
以下例程收集在常规中文 C 库中:
表 12–3 简体中文大小写转换函数(在 zh/xctype.h 中声明)
函数 |
说明 |
---|---|
tocupper |
将代码集 1 中的小写罗马字母转换成大写字母 |
toclower |
将代码集 1 中的大写罗马字母转换成小写字母 |
在简体中文字符集中,代码集 0 中的罗马字符和数字在代码集 1 中重复。下列函数测试宽字符。
表 12–4 简体中文代码集转换函数
功能 |
说明 |
---|---|
atocgb |
将 ASCII(代码集 0)中的字母或数字字符转换成相应的 GB-2312-80(代码集 1)中的字符。 |
cgbtoa |
将 GB-2312-80(代码集 1)中的字母或数字字符转换成相应的 ASCII (代码集 0)中的字符。 |
有关这些函数的更多信息,请参见 cconv() (3x) 手册页。
以下例程对 GB-2312-80 字符集进行基于字符的代码转换。它们在 EUC 格式和 GB-2312-80 格式之间转换字符和字符串。要使用这些例程,必须使用 C 编译器选项 -lcle 链接库 lib cle。有关详细信息,请参见 cconv(3) 手册页。
表 12–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 位) |
中文 OpenWindows 2.x、Solaris 1.x 或 SunOS 4.x 系统下编译的应用程序的二进制格式与当前中文 Solaris 发行版的二进制格式不同。不过,通过使用当前中文发行版中包含的二进制兼容性软件包 (BCP),早期的应用程序无需经过重新编译即可在当前的中文发行版下运行。
您的系统配置中必须包含 SUNWowbcp,您才能够运行以下命令。有关安装信息,请与您的系统管理员联系。
下列 BCP 命令可以运行早期的 SunOS4.x、Solaris 1.x 或中文 OpenWindows 2.x 应用程序的已编译的二进制代码,而无需重新编译它们。但是,OpenWindows V2 中文应用程序将不显示输入服务器状态区域。如下例所示,此命令按照应用程序的旧名称 (old_application_name) 调用应用程序,并使用较旧版本的特定语言环境名称 (old-locale) 设置基本语言环境、输入语言和显示语言:
system% old_application_name -lc_basiclocale old-locale -lc_inputlang old-locale \ -lc_displaylang old-locale |
下例显示了在当前的简体中文 Solaris 环境中用于运行早期版本的 textedit 应用程序的已编译的二进制代码的命令:
system% textedit -lc_displaylang chinese -lc_basiclocale chinese \ -lc_inputlang chinese |
由于简体中文 Solaris 2.x 和 1.x 应用程序之间不兼容,所以不能在二者之间剪切和粘贴中文字符。