当前 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() |
将宽字符推送回输入流中 |