简体中文 Solaris 用户指南

附录 A 向后兼容性

本附录包含有关使程序与亚洲版 Solaris 软件的早期版本向后兼容的信息。下面介绍的每个公用程序都受支持,但对于此 Solaris 版本,建议您使用《国际语言环境指南》中介绍的 XPG4 国际化 API。

简体中文测试公用程序

这些公用程序测试简体中文 (GB-2312-80) 国家标准字符集的各个方面。它们还假定所测试的字符是国家标准字符集的一部分。

这些表里的功能变量必须是 WC wchar_t 中的字符。有关更多信息,请参见 cctype(3x) man 页。

表 A–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。 

有两个用于简体中文的额外例程:iscgbisceuc。它们测试 GB-2312-80 字符集中的字符。iscgb 例程需要宽字符,而 isceuc 需要 EUC 格式的 GB-2312-80 字符。有关更多信息,请参见 cctype (3x) man页。

表 A–2 常规简体中文常规字符分类功能

例程 

说明 

iscgb

如果它在 GB-2312-80 中,则返回 true。  

isceuc

如果它是 EUC 格式的 GB-2312-80 字符,则返回 true。 

简体中文转换公用程序

本节描述宽字符和字符串输入输出的功能、字符分类和简体中文字符集的转换功能。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 软件提供了用于各种转换的公用程序,例如:

使用通用多字节转换公用程序的程序应该包含头文件 widec.hwctype.hzh/xctype.h 中声明了简体中文 Solaris 特定的例程(如 iscxxx )。

使用通用多字节转换公用程序的程序应该包含三个头文件: wctype.hwidec.h、和 zh/xctype.h

locale/xctype.h 头文件声明与中文语言环境特定的例程,这些例程的名称具有相同的形式 isc xxxx

与前一节中介绍的分类功能一样,这些功能的使用会受 setlocale 功能的控制(本章的其他地方和其他章节将介绍此功能)。

语言环境特定的转换例程(如中文 cgbtoeuc )包含在 libcle 库中:

编译时通过 C 编译器选项 - lcle 可链接该库。

编码集内的转换

多字节转换功能类似于单字节转换功能 touppertolower。 这些功能将宽字符转换成其他宽字符。有关转换例程的更多信息,请参见 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 位)  

二进制兼容性软件包 (BCP)

在中文 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) 调用它,并使用旧版本的特定语言环境名称 (oldlocale) 设置应用程序的基本语言环境、输入语言和显示语言:


system% old_application_name -lc_basiclocale oldlocale -lc_inputlang oldlocale \
    -lc_displaylang oldlocale

    要使当前的简体中文 Solaris 发行系统能够运行 textedit 应用程序早期版本的已编译二进制代码,可输入如下内容:


system% textedit -lc_displaylang chinese -lc_basiclocale chinese  -lc_inputlang chinese

简体中文 Solaris 2.x 和 1.x 应用程序之间不兼容性,因此无法在它们之间剪切和粘贴中文字符。