该标准对于什么构成有效的语言环境名称几乎没有提及。只有传递无效的区域设置名称才会导致std::runtime_error
。哪些语言环境名称可用于常见的 Windows 编译器(例如 MSVC、MinGW 和 ICC)?
好吧,C 和 C++ 语言环境之间存在差异。
开始吧:
-
MSVC C++ std::locale 和 C setlocale
接受区域设置名称为“Language[_Country][.Codepage]”,例如“English_United States.1251”,否则会抛出异常。注意:代码页不能是 65001/UTF-8,并且应该与该语言环境的 ANSI 代码页一致(或直接省略)
-
Vista 和 7 中的 MSVC C++ std::locale 和 C setlocale 应该接受区域设置
[语言][-脚本][-国家/地区] 例如使用 ISO-631 语言代码的“en-US”和
ISO 3166 区域和脚本名称。
我在 Windows 7 上使用 Visual Studio 进行了测试 - 它不起作用。
-
MinGW C++ std::locale 接受“C”和“POSIX”,它不支持其他语言环境,
实际上,gcc 仅通过 GNU C 库支持语言环境 - 基本上仅在 Linux 下。
setlocale 是本机 Windows API 调用,因此应该支持我上面提到的所有内容。
与替代 C++ 库一起使用时,它可以支持更广泛的区域设置
例如 Apache stdcxx 或 STL 端口。
ICC - 我没有测试过它,但它取决于它使用的标准 C++ 库。为了
Linux 下的示例使用 GCC 的 libstdc++,因此它支持所有 gcc 语言环境
支持。我不知道它在Windows下使用什么标准C++库。
如果您想拥有“编译器和平台”独立的语言环境支持(实际上
更好的支持)看看 Boost.Locale
Artyom
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)