2.7.1. 在链接时选择区域设置

可以在链接时选择 C 库的区域设置子系统,或者将其扩展为可以在运行时进行选择。 下面介绍了库如何使用区域设置类别:

ISO8859-1 实现

Table 2.7 显示了 ISO8859-1(Latin-1 字母表)区域设置类别。

Table 2.7. 缺省 ISO8859-1 区域设置 

符号 说明
__use_iso8859_ctype 选择 ISO8859-1 (Latin-1) 字符分类。 这实际上是 7 位 ASCII,只是字符代码 160-255 表示一组非常有用的欧洲标点符号字符、字母和重音字母。
__use_iso8859_collate 选择与 Latin-1 字母表对应的 strcoll/strxfrm 归类表。 缺省 C 区域设置不需要归类表。
__use_iso8859_monetary 选择使用 Latin-1 编码的英国货币类别。
__use_iso8859_numeric 在输出数值时选择逗号作为千分位。
__use_iso8859_locale 选择此表中所述的所有 ISO8859-1 选项。

没有 ISO8859-1 版本的 LC_TIME 类别。

Shift-JIS 和 UTF-8 实现

Table 2.8 显示了 Shift-JIS(日文字符)或 UTF-8(Unicode 字符)区域设置类别。

Table 2.8. 缺省 Shift-JIS 和 UTF-8 区域设置 

函数 说明
__use_sjis_ctype 将字符集设置为日文字符的 Shift-JIS 多字节编码
__use_utf8_ctype 将字符集设置为所有 Unicode 字符的 UTF-8 多字节编码

下面介绍了 Shift-JIS 编码的效果:

  • 对于在 Shift-JIS 中为自包含字符的任何字节值,普通 ctype 函数可以正确对其进行处理。 例如,isalpha() 将半宽度的片假名字符视为字母,Shift-JIS 将其编码为介于 0xA60xDF 之间的单个字节。

  • 多字节转换函数(如 mbrtowc()mbsrtowcs()wcrtomb())均可在 Unicode 宽字符串与 Shift-JIS 多字节字符串之间进行转换。

  • printf("%ls") 将 Unicode 宽字符串转换为 Shift-JIS 输出;而 scanf("%ls") 将 Shift-JIS 输入转换为 Unicode 宽字符串。

如果应用程序中包含多个区域设置,则可以在运行时在多字节区域设置与单字节区域设置之间任意切换。 缺省情况下,每次只包含一种区域设置。

Copyright © 2007 ARM Limited. All rights reserved. ARM DUI 0349AC
Non-Confidential