国际语言环境指南

libc 中的国际化 API

Solaris 9 环境提供两组 API:

宽字符代码是固定宽度的逻辑实体单元。因此,在使用多字节字符时,不必跟踪维护正确的字符边界。

当程序从文件获取输入时,可以将文件的多字节数据转换为宽字符进程代码,方法是直接使用 fscanf(3S) 和 fwscanf(3S) 等输入函数,或者在输入之后使用 mbtowc(3C) 和 mbsrtowcs(3C) 等转换函数。要将输出数据从宽字符格式转换为多字节字符格式,请使用 fwprintf(3S) 和 fprintf(3S) 等输出函数,或者在输出之前应用 wctomb(3C) 和 wcsrtombs(3C) 等转换函数。

本章剩余部分中的表格描述了 Solaris 9 产品中包含的国际化 API。

下表描述了 libc 中的信息传送函数 API。

表 2–1 libc 中的信息传送函数

库例程 

说明  

catclose()

关闭信息目录 

catgets()

读取程序信息 

catopen()

打开信息目录 

dgettext()

指定了域,从信息目录中获取信息 

dcgettext()

指定了域和种类,从信息目录中获取信息 

textdomain()

设置并查询当前域  

bindtextdomain()

绑定信息域的路径  

gettext()

从信息数据库中检索文本字符串  

下表描述了 libc 中的代码转换函数 API。

表 2–2 libc 中的代码转换

库例程  

说明  

iconv()

转换代码  

iconv_close()

解除分配转换描述符  

iconv_open()

分配转换描述符  

下表描述了 libc 中的正规表达式 API。

表 2–3 libc 中的正规表达式

库例程  

说明  

regcomp()

编译正规表达式 

regexec()

执行正规表达式匹配 

regerror()

提供从错误代码到错误信息的映射 

regfree()

释放由 regcomp() 分配的内存

fnmatch()

匹配文件名或路径名 

下表描述了 libc 中的宽字符函数 API。

表 2–4 libc 中的宽字符类

库例程  

说明  

wctype()

定义字符类 

wctrans()

定义字符映射 

下表列出 libc 中的修改和查询语言环境。

表 2–5 libc 中的修改和查询语言环境

库例程  

说明  

setlocale()

修改和查询程序的语言环境 

下表列出 libc 中的查询语言环境数据。

表 2–6 libc 中的查询语言环境数据

库例程  

说明  

nl_langinfo()

获取当前语言环境的语言和文化信息 

localeconv()

获取当前语言环境的货币和数字格式信息 

下表描述了 libc 中的字符分类函数 API。

表 2–7 libc 中的字符分类和拼写

库例程  

说明  

isalpha()

字符是字母吗? 

isupper()

字符是大写吗? 

islower()

字符是小写吗? 

isdigit()

字符是数字吗? 

isxdigit()

字符是十六进制数字吗? 

isalnum()

字符是字母或数字吗? 

isspace()

字符是空格吗? 

ispunct()

字符是标点符号吗? 

isprint()

字符是可打印字符吗? 

iscntrl()

字符是控制字符吗? 

isascii()

字符是 ASCII 字符吗? 

isgraph()

字符是可见字符吗? 

isphonogram()

宽字符是音标吗? 

isideogram()

宽字符是表意符号吗? 

isenglish()

宽字符在辅助代码集的英语字母表中吗? 

isnumber()

宽字符是辅助代码集中的数字吗? 

isspecial()

特殊宽字符在辅助代码集中吗? 

iswalpha()

宽字符是字母吗? 

iswupper()

宽字符是大写吗? 

iswlower()

宽字符是小写吗?  

iswdigit()

宽字符是数字吗?  

iswxdigit()

宽字符是十六进制数字吗?  

iswalnum()

宽字符是字母字符或数字吗? 

iswspace()

宽字符是空白吗?  

iswpunct()

宽字符是标点符号吗? 

iswprint()

宽字符是可打印字符吗? 

iswgraph()

宽字符是可见字符吗? 

iswcntrl()

宽字符是控制字符吗? 

iswascii()

宽字符是 ASCII 字符吗? 

toupper()

将小写字符转换为大写字符。 

tolower()

将大写字符转换为小写字符。 

towupper()

将小写宽字符转换为大写宽字符。 

towlower()

将大写宽字符转换为小写宽字符。 

towctrans()

宽字符映射。 

下表描述了 libc 中的字符排序函数 API。

表 2–8 libc 中的字符排序

库例程  

说明  

strcoll()

排序字符串 

strxfrm()

变换字符串以便进行比较 

wcscoll()

排序宽字符串 

wcsxfrm()

变换宽字符串以便进行比较 

下表描述了 libc 中的货币处理函数 API。

表 2–9 libc 中的货币格式

库例程  

说明  

localeconv()

获取当前语言环境的货币格式信息 

strfmon()

将货币值转换为字符串表示形式 

下表描述了 libc 中的日期和时间格式。

表 2–10 libc 中的日期和时间格式

库例程  

说明  

getdate()

转换用户格式日期和时间。 

strftime()

将日期和时间转换为字符串表示形式。%u 转换函数符合《X/Open CAE 规范:系统接口和头》第 4 期,第 2 版。此函数将工作日表示为十进制数字 [1,7],其中 1 现在表示周一。

strptime()

日期和时间转换。 

下表描述了 libc 中的多字节处理函数 API。

表 2–11 libc 中的多字节处理

库例程  

说明  

btowc()

单字节到宽字符转换 

mbrlen()

获取字符中的字节数(可重新开始) 

mbsinit()

确定转换对象状态 

mbrtowc()

将字符转换为宽字符代码(可重新开始) 

mbsrtowcs()

将字符串转换为宽字符串(可重新开始) 

mblen()

获取字符中的字节数 

mbtowc()

将字符转换为宽字符代码 

mbstowcs()

将字符串转换为宽字符串 

下表描述了 libc 中的宽字符和字符串处理。

表 2–12 libc 中的宽字符和字符串处理

库例程  

说明  

wcsncat()

并置宽字符串,并置长度为 n

wsdup()

复制宽字符串 

wcscmp()

比较宽字符串 

wcsncmp()

比较宽字符串,比较长度为 n

wcscpy()

复制宽字符串 

wcsncpy()

复制宽字符串,复制长度为 n

wcschr()

在宽字符串中查找字符 

wcsrchr()

从右边开始在宽字符串中查找字符 

wcslen()

 获取宽字符串的长度

wscol()

返回宽字符串的显示宽度 

wcsspn()

返回一个宽字符串在另一个宽字符串中的跨度 

wcscspn()

返回一个宽字符串不在另一个宽字符串中的跨度 

wcspbrk()

返回指向一个位于另一个宽字符串中的宽字符串的指针 

wcstok()

在整个宽字符串中移动标记 

wscwcs()

在宽字符串中查找字符串 

wcstombs()

将宽字符串转换为多字节字符串 

wctomb()

将宽字符转换为多字节字符 

wcwidth()

确定宽字符的列位置数 

wcswidth()

确定宽字符串的列位置数 

wctob()

宽字符到单字节转换 

wcrtomb()

将宽字符代码转换为字符(可重新开始) 

wcstol()

将宽字符串转换为长整数 

wcstoul()

将宽字符串转换为无符号长整数 

wcstod()

将宽字符串转换为双精度 

wcsrtombs()

将宽字符串转换为字符串(可重新开始) 

wcscat()

并置宽字符串 

下表描述了 libc 中的格式化宽字符输入和输出。

表 2–13 libc 中的格式化宽字符输入和输出

库例程  

说明  

  

wsprintf()

根据格式生成宽字符串 

wsscanf()

格式化输入转换 

fwprintf()

打印格式化宽字符输出 

fwscanf()

转换格式化宽字符输入 

wprintf()

打印格式化宽字符输出  

wscanf()

转换格式化宽字符输入  

swprintf()

打印格式化宽字符输出  

swscanf()

转换格式化宽字符输入  

vfwprintf()

stdarg 参数列表的宽字符格式化输出

vswprintf()

stdarg 参数列表的宽字符格式化输出

下表描述 libc 中的宽字符串函数 API。

表 2–14 宽字符串libc

库例程  

说明  

wscasecmp()

比较宽字符串,忽略大小写差异 

wsncasecmp()

进程代码串操作 

wcsstr()

查找宽字符子串 

wmemchr()

在内存中查找宽字符 

wmemcmp()

在内存中比较宽字符 

wmemcpy()

在内存中复制宽字符 

wmemmove()

在具有重叠区域的内存中复制宽字符 

wmemset()

在内存中设置宽字符 

下表描述了 libc 中的宽字符输入和输出。

表 2–15 libc 中的宽字符输入和输出

库例程  

说明  

fgetwc()

从流中获取多字节字符,并转换为宽字符 

getwchar()

stdin 中获取多字节字符,并转换为宽字符

fgetws()

从流中获取多字节串,并转换为宽字符 

getws()

stdin 中获取多字节串,并转换为宽字符

fputwc()

将宽字符转换为多字节字符,并放入流中 

fwide()

设置流定向 

putwchar()

将宽字符转换为多字节字符,并放入 stdin

fputws()

将宽字符转换为多字节串,并放入流中 

putws()

将宽字符转换为多字节串,并放入 stdin

ungetwc()

将宽字符推送回输入流中。