区域设置和代码页
区域设置 ID 反映特定地理区域的当地约定和语言。 可能有一个以上的国家/地区说某种特定的语言,例如,巴西和葡萄牙都说葡萄牙语。 反之,一个国家/地区可能有一种以上的官方语言。 例如,加拿大有两种语言:英语和法语。 因此,加拿大有两种不同的区域设置:加拿大英语和加拿大法语。 一些与区域设置相关的类别包括日期的格式设置和货币值的显示格式。
语言确定文本和数据的格式约定,而国家/地区则确定本地约定。 每种语言都有一个由代码页表示的唯一映射,其中包括字母表中的字符以外的字符(如标点符号和数字)。 代码页是一个字符集并且与语言相关。 因此,区域设置是语言、国家/地区和代码页的唯一组合。 可通过调用 setlocale 函数在运行时更改区域设置和代码页设置。
不同的语言可能使用不同的代码页。 例如,ANSI 代码页 1252 适用于英语和大多数欧洲语言;而 ANSI 代码页 932 则适用于日本汉字。 几乎所有代码页都共享 ASCII 字符集中最低的 128 个字符(0x00 到 0x7F)。
任何单字节代码页都可在一个表(含 256 项)中表示为字节值到字符(包括数字和标点符号)或字形的映射。 任何多字节代码页也可表示为超大型表(含 6.4 万项),该表包含双字节值到字符的映射。 但实际上,对于前 256 个(单字节)字符,通常用表表示;对于双字节值,则用范围表示。
有关代码页的详细信息,请参见 Code Pages。
C 运行时库有两类内部代码页:区域设置和多字节。 在程序执行期间可以更改当前代码页(请参阅相关文档了解 setlocale 和 _setmbcp 函数)。 此外,运行时库可以获取和使用操作系统代码页的值,此代码页在程序执行期间保持不变。
区域设置代码页发生更改后,与区域设置相关的函数集的行为将更改为由所选代码页指示的行为。 默认情况下,所有与区域设置相关的函数都使用对“C”区域设置唯一的区域设置代码页开始执行过程。 可以通过调用 setlocale
函数来更改内部区域设置代码页(以及其他特定于区域设置的属性)。 对 setlocale
(LC_ALL, "") 的调用会将区域设置设置为由操作系统用户区域设置指示的那个区域设置。
同样,当多字节代码页发生更改时,多字节函数的行为将更改为由所选代码页指示的行为。 默认情况下,所有多字节函数都使用与操作系统默认代码页相对应的多字节代码页开始执行过程。 可以通过调用 _setmbcp
函数来更改内部多字节代码页。
C 运行时函数 setlocale
可设置、更改或查询当前程序的部分或全部区域设置信息。 _wsetlocale 是 setlocale
的宽字符版本;_wsetlocale
的参数和返回值都是宽字符字符串。