使用 setlocale() 进行区域设置(本地设置、地域设置)时,可以通过 locale 参数指明具体的地域设置名称(字符串),也就是设置为哪种地域,或者说哪种语言文化。
C语言标准并未对 locale 的格式进行说明,只是要求编译器至少支持以下三个名称:
locale 在 Windows 和 Linux 下有不同的格式,除了上面三个强制要求的名称,其他名称在 Windows 和 Linux 下的写法一般不同。本文只讲解 Windows 下的地域设置格式,如果读者希望了解 Linux 下的情况,请猛击《Linux setlocale()区域设置格式说明以及名称汇总》。
微软已经在官方文档中说明了 locale 参数可以使用的格式,请猛击:https://technet.microsoft.com/zh-cn/library/hzz3tw78.aspx
以下是我自己的理解,对有些读者可能更加通俗易懂。
Linux 下的 locale 只有一种格式,而 Windows 下的 locale 有三种格式。
Windows 定义了一组专有的地域设置名称供 setlocale() 使用,这些名称包含了地域设置的所有信息,例如:
不同的 Windows 版本支持不同的专有名称,大家在使用时注意查看手册。Windows 各个版本支持的所有名称请猛击:https://msdn.microsoft.com/en-us/library/cc233982.aspx
使用 setlocale() 进行地域设置时,还可以按照下面的格式来设置 locale 参数:
language 表示语言,例如英语或中文;area 表示使用该语言的地区,例如美国或者中国大陆;codepage 表示代码页,例如 GBK 编码的代码页是936。
举一个简单的例子:
chs 是“chinese-simplified”的简写,表示简体中文,china 表示中国大陆,936 是 GBK 编码的代码页。
可以省略 area 和 codepage,只写 language,此时会选择当前 language 的默认 area 和 codepage;如此一来,上例就可以简写为chs。GBK 是简体中文版 Windows 默认的编码,它的代码页就是 936。
字符编码就是使用某种语言的某个地区定义的文字在计算机内部的表示方式,代码页就是字符编码在计算机中的 ID,知道了代码页也就知道使用哪个地区的哪种语言了。使用代码页的格式为:
例如,setlocale("LC_ALL", ".936");就表示使用 GBK 编码,对应的是使用汉语的中国大陆地区。
Windows 下可用的所有代码页列表请猛击:https://msdn.microsoft.com/en-us/library/dd317756(VS.85).aspx
以上三种格式中,第一种是微软官方推荐使用的,这种格式和 Linux 下的非常类似。