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