当前 Solaris 环境提供两组 API:
多字节(文件代码)
宽字符(进程代码)
宽字符代码是固定宽度的逻辑实体单元。因此,在使用多字节字符时,不必跟踪维护正确的字符边界。
当程序从文件获取输入时,可以使用 fscanf 和 fwscanf 等输入函数直接将文件的多字节数据转换为宽字符进程代码,或者在输入后使用 mbtowc 和 mbsrtowcs 等转换函数进行转换。要将输出数据从宽字符格式转换为多字节字符格式,请使用 fwprintf 和 fprintf 等输出函数,或者在输出之前应用 wctomb 和 wcsrtombs 等转换函数。
本章剩余部分中的表格介绍了当前 Solaris 系统中包含的国际化 API。
下表介绍了 libc 中的消息传送函数 API。
表 2–1 libc 中的消息传送函数| 库例程 | 说明 | 
|---|---|
| bindtextdomain() | 绑定信息域的路径 | 
| catclose() | 关闭信息目录 | 
| catgets() | 读取程序信息 | 
| catopen() | 打开信息目录 | 
| dcgettext() | 指定了域和种类,从信息目录中获取信息 | 
| dgettext() | 指定了域,从信息目录中获取信息 | 
| gettext() | 从信息数据库中检索文本字符串 | 
| textdomain() | 设置并查询当前域 | 
下表介绍了 libc 中的代码转换函数 API。
表 2–2 libc 中的代码转换函数| 库例程 | 说明 | 
|---|---|
| iconv() | 转换代码 | 
| iconv_close() | 解除分配转换描述符 | 
| iconv_open() | 分配转换描述符 | 
下表介绍了 libc 中的正则表达式 API。
表 2–3 libc 中的正则表达式| 库例程 | 说明 | 
|---|---|
| fnmatch() | 匹配文件名或路径名 | 
| regcomp() | 编译正则表达式 | 
| regerror() | 提供从错误代码到错误信息的映射 | 
| regexec() | 执行正则表达式匹配 | 
| regfree() | 释放由 regcomp() 分配的内存 | 
下表介绍了 libc 中的宽字符函数 API。
表 2–4 libc 中的宽字符类| 库例程 | 说明 | 
|---|---|
| wctrans() | 定义字符映射 | 
| wctype() | 定义字符类 | 
下表列出 libc 中的修改和查询语言环境。
表 2–5 libc 中的修改和查询语言环境函数| 库例程 | 说明 | 
|---|---|
| setlocale() | 修改和查询程序的语言环境 | 
表 2–6 libc 中的查询语言环境数据
| 库例程 | 说明 | 
|---|---|
| localeconv() | 获取当前语言环境的货币和数字格式信息 | 
| nl_langinfo() | 获取当前语言环境的语言和文化信息 | 
下表介绍了 libc 中的字符分类函数 API。
表 2–7 libc 中的字符分类和拼写| 库例程 | 说明 | 
|---|---|
| isalnum() | 字符是字母或数字吗? | 
| isalpha() | 字符是字母吗? | 
| isascii() | 字符是 ASCII 字符吗? | 
| iscntrl() | 字符是控制字符吗? | 
| isdigit() | 字符是数字吗? | 
| isenglish() | 宽字符在辅助代码集的英语字母表中吗? | 
| isgraph() | 字符是可见字符吗? | 
| isideogram() | 宽字符是表意符号吗? | 
| islower() | 字符是小写吗? | 
| isnumber() | 宽字符是辅助代码集中的数字吗? | 
| isphonogram() | 宽字符是音标吗? | 
| isprint() | 字符是可打印字符吗? | 
| ispunct() | 字符是标点符号吗? | 
| isspace() | 字符是空格吗? | 
| isspecial() | 特殊宽字符在辅助代码集中吗? | 
| isupper() | 字符是大写吗? | 
| iswalnum() | 宽字符是字母字符或数字吗? | 
| iswalpha() | 宽字符是字母吗? | 
| iswascii() | 宽字符是 ASCII 字符吗? | 
| iswcntrl() | 宽字符是控制字符吗? | 
| iswdigit() | 宽字符是数字吗? | 
| iswgraph() | 宽字符是可见字符吗? | 
| iswlower() | 宽字符是小写吗? | 
| iswprint() | 宽字符是可打印字符吗? | 
| iswpunct() | 宽字符是标点符号吗? | 
| iswspace() | 宽字符是空白吗? | 
| iswupper() | 宽字符是大写吗? | 
| iswxdigit() | 宽字符是十六进制数字吗? | 
| isxdigit() | 字符是十六进制数字吗? | 
| tolower() | 将大写字符转换为小写字符。 | 
| toupper() | 将小写字符转换为大写字符。 | 
| towctrans() | 宽字符映射。 | 
| towlower() | 将大写宽字符转换为小写宽字符。 | 
| towupper() | 将小写宽字符转换为大写宽字符。 | 
下表介绍了 libc 中的字符排序函数 API。
表 2–8 libc 中的字符排序| 库例程 | 说明 | 
|---|---|
| strcoll() | 排序字符串 | 
| strxfrm() | 变换字符串以便进行比较 | 
| wcscoll() | 排序宽字符串 | 
| wcsxfrm() | 变换宽字符串以便进行比较 | 
下表介绍了 libc 中的货币处理函数 API。
表 2–9 libc 中的货币格式| 库例程 | 说明 | 
|---|---|
| localeconv() | 获取当前语言环境的货币格式信息 | 
| strfmon() | 将货币值转换为字符串表示形式 | 
下表介绍了 libc 中的日期和时间格式。
表 2–10 libc 中的日期和时间格式| 库例程 | 说明 | 
|---|---|
| getdate() | 转换用户格式日期和时间。 | 
| strftime() | 将日期和时间转换为字符串表示形式。%u 转换函数符合“系统界面和标题”的第 4 期,版本 2 中的 X/Open CAE 规范。该函数使用十进制数字 [1,7] 表示一周中的每一天,现在,1 表示星期一。 | 
| strptime() | 日期和时间转换。 | 
下表介绍了 libc 中的多字节处理函数 API。
表 2–11 libc 中的多字节处理| 库例程 | 描述 | 
|---|---|
| btowc() | 单字节到宽字符转换 | 
| mblen() | 获取字符中的字节数 | 
| mbrlen() | 获取字符中的字节数(可重新开始) | 
| mbrtowc() | 将字符转换为宽字符代码(可重新开始) | 
| mbsinit() | 确定转换对象状态 | 
| mbsrtowcs() | 将字符串转换为宽字符串(可重新开始) | 
| mbstowcs() | 将字符串转换为宽字符串 | 
| mbtowc() | 将字符转换为宽字符代码 | 
下表介绍了 libc 中的宽字符和字符串处理。
表 2–12 libc 中的宽字符和字符串处理| 库例程 | 描述 | 
|---|---|
| wcrtomb() | 将宽字符代码转换为字符(可重新开始) | 
| wcscat() | 并置宽字符串 | 
| wcschr() | 在宽字符串中查找字符 | 
| wcscmp() | 比较宽字符串 | 
| wcscpy() | 复制宽字符串 | 
| wcscspn() | 返回一个宽字符串不在另一个宽字符串中的跨度 | 
| wcslen() | 获取宽字符串的长度 | 
| wcsncat() | 并置宽字符串,并置长度为 n | 
| wcsncmp() | 比较宽字符串,比较长度为 n | 
| wcsncpy() | 复制宽字符串,复制长度为 n | 
| wcspbrk() | 返回指向一个位于另一个宽字符串中的宽字符串的指针 | 
| wcsrchr() | 从右边开始在宽字符串中查找字符 | 
| wcsrtombs() | 将宽字符串转换为字符串(可重新开始) | 
| wcsspn() | 返回一个宽字符串在另一个宽字符串中的跨度 | 
| wcstod() | 将宽字符串转换为双精度 | 
| wcstok() | 在整个宽字符串中移动标记 | 
| wcstol() | 将宽字符串转换为长整数 | 
| wcstombs() | 将宽字符串转换为多字节字符串 | 
| wcstoul() | 将宽字符串转换为无符号长整数 | 
| wscwcs() | 在宽字符串中查找字符串 | 
| wcswidth() | 确定宽字符串的列位置数 | 
| wctob() | 宽字符到单字节转换 | 
| wctomb() | 将宽字符转换为多字节字符 | 
| wcwidth() | 确定宽字符的列位置数 | 
| wscol() | 返回宽字符串的显示宽度 | 
| wsdup() | 复制宽字符串 | 
下表介绍了 libc 中的格式化宽字符输入和输出。
表 2–13 libc 中的格式化宽字符输入和输出| 库例程 | 描述 | 
|---|---|
| fwprintf() | 打印格式化宽字符输出 | 
| fwscanf() | 转换格式化宽字符输入 | 
| swprintf() | 打印格式化宽字符输出 | 
| swscanf() | 转换格式化宽字符输入 | 
| vfwprintf() | stdarg 参数列表的宽字符格式化输出 | 
| vswprintf() | stdarg 参数列表的宽字符格式化输出 | 
| wprintf() | 打印格式化宽字符输出 | 
| wscanf() | 转换格式化宽字符输入 | 
| wsprintf() | 根据格式生成宽字符串 | 
| wsscanf() | 格式化输入转换 | 
下表介绍 libc 中的宽字符串函数 API。
表 2–14 宽字符串 libc| 库例程 | 描述 | 
|---|---|
| wcsstr() | 查找宽字符子串 | 
| wmemchr() | 在内存中查找宽字符 | 
| wmemcmp() | 在内存中比较宽字符 | 
| wmemcpy() | 在内存中复制宽字符 | 
| wmemmove() | 在具有重叠区域的内存中复制宽字符 | 
| wmemset() | 在内存中设置宽字符 | 
| wscasecmp() | 比较宽字符串,忽略大小写差异 | 
| wsncasecmp() | 进程代码串操作 | 
下表介绍了 libc 中的宽字符输入和输出。
表 2–15 libc 中的宽字符输入和输出| 库例程 | 说明 | 
|---|---|
| fgetwc() | 从流中获取多字节字符,并转换为宽字符 | 
| fgetws() | 从流中获取多字节串,并转换为宽字符 | 
| fputwc() | 将宽字符转换为多字节字符,并放入流中 | 
| fputws() | 将宽字符转换为多字节串,并放入流中 | 
| fwide() | 设置流定向 | 
| getwchar() | 从 stdin 中获取多字节字符,并转换为宽字符 | 
| getws() | 从 stdin 中获取多字节串,并转换为宽字符 | 
| putwchar() | 将宽字符转换为多字节字符,并放入 stdin 中 | 
| putws() | 将宽字符转换为多字节串,并放入 stdin 中 | 
| ungetwc() | 将宽字符推送回输入流中 |