Bil*_*eal 30 c++ windows locale
关于构成有效语言环境名称的内容,该标准几乎没有提及; 仅传递无效的区域设置名称导致std::runtime_error.哪些语言环境名称可用于常见的Windows编译器,如MSVC,MinGW和ICC?
Art*_*yom 24
好的,C和C++语言环境之间存在差异.
开始吧:
MSVC C++ std :: locale和C setlocale
接受语言环境名称为"语言[_Country] [.代码页]",例如"English_United States.1251"否则会抛出.注意:代码页不能是65001/UTF-8,并且应该与此语言环境的ANSI代码页一致(或者只是省略)
Vista和7中的MSVC C++ std :: locale和C setlocale应该接受语言环境[语言] [ - 脚本] [ - 国家],如"en-US",使用ISO-631语言代码和ISO 3166区域和脚本名称.
我在Windows 7上使用Visual Studio进行了测试 - 它不起作用.
MinGW C++ std :: locale接受"C"和"POSIX"它不支持其他语言环境,实际上gcc仅支持在GNU C库上的语言环境 - 基本上只在Linux下.
setlocale是本机Windows API调用,所以应该支持我上面提到的所有内容.
当与Apache stdcxx或STL Port等替代C++库一起使用时,它可能支持更广泛的语言环境.
ICC - 我没有测试它,但它取决于它使用的标准C++库.例如,在Linux下,它使用GCC的libstdc ++,因此它支持gcc支持的所有语言环境.我不知道它在Windows下使用什么标准C++库.
如果你想拥有"编译器和平台"独立的语言环境支持(实际上更好的支持),请看看Boost.Locale
阿尔乔姆
ice*_*ime 20
我相信您需要的信息在这里:
locale "lang[_country_region[.code_page]]"
| ".code_page"
| ""
| NULL
Run Code Online (Sandbox Code Playgroud)
此页面提供以下链接:
虽然我的答案涵盖setlocale了std::locale,但这个MSDN页面似乎暗示格式确实相同:
类语言环境的对象还将语言环境名称存储为类字符串的对象.使用无效的区域设置名称来构造区域设置构面或区域设置对象会引发类的对象
runtime_error.如果区域设置对象无法确定C样式区域设置与对象表示的区域设置完全对应,则存储的区域设置名称为"*". 否则,您可以通过调用在标准C库中为语言环境对象loc建立匹配的语言环境setlocale(LC_ALL, loc.name.c_str).
另请参阅此页面和此线程,它往往显示std::locale内部使用setlocale.
Joh*_*nck 10
这是一个几乎可以在任何地方使用的语言环境名称:"".也就是说,空字符串.这与"C"您可能默认获得的区域设置形成对比.空字符串作为参数std::setlocale()意味着"使用用户或环境设置的首选语言环境".如果你使用它,缺点是你的程序在任何地方都不会有相同的输出; 好处是您的用户可能认为它的工作方式与他们想要的一样.