C++ 不同平台上的保证区域设置

C++ 不同平台上的保证区域设置,c++,linux,windows,macos,localization,C++,Linux,Windows,Macos,Localization,在windows Linux或macOSX上,除了默认的C语言环境之外,是否还有其他语言环境保证存在或至少默认安装在最终用户计算机上? 我使用boost属性树,它可以从文件中读取XML,并将区域设置作为参数。如果我想编写一个跨平台的应用程序,并且文件是德语和utf-8编码的,我应该使用哪种语言环境?不保证语言环境,而是C语言环境(这只是POSIX中的语言环境) 各种Linux发行版允许您选择要安装的语言环境,通常只安装国家(和地区)语言环境(现在是UTF8变体)。所以不,没有办法。我不希望在这方

在windows Linux或macOSX上,除了默认的C语言环境之外,是否还有其他语言环境保证存在或至少默认安装在最终用户计算机上?
我使用boost属性树,它可以从文件中读取XML,并将区域设置作为参数。如果我想编写一个跨平台的应用程序,并且文件是德语和utf-8编码的,我应该使用哪种语言环境?

不保证语言环境,而是C语言环境(这只是POSIX中的语言环境)

各种Linux发行版允许您选择要安装的语言环境,通常只安装国家(和地区)语言环境(现在是UTF8变体)。所以不,没有办法。我不希望在这方面有任何有用的东西:语言环境名称没有那么标准化(但现在我们有了RFC,所以RFC与已安装的语言环境无关)

但是这个有一个Unicode;-)

Unicode Consortium发布自己的语言环境定义:,您可以使用此项目查找库。这就解决了更多的问题,例如Python并不是所有函数都使用locale,所以您可能会得到错误的本地化数据

另一方面,我认为你在设计(或寻找错误的问题)

语言环境是用户的选择,因此请尊重用户的选择。尝试使用德语UTF8语言环境。您应该期望这样的本地计算机安装在用户希望使用德语文本的计算机上

如果用户没有德语语言环境,可能不希望有本地化的数字和日期,所以忽略它(因此让系统选择正确的默认值,使用应该期望的)。注意:在我的系统中,我使用DK locale表示日期,因为我更喜欢ISO符号(2020-11-26)而不是德语日期。在Windows上,我倾向于选择“,”作为列表分隔符(而不是“;”,因为它很方便,所以我可以复制粘贴excel公式)。我希望程序尊重我的语言环境选择,而不是选择他们的语言环境

显然也有例外(答案的第一部分是ans):您为用户(例如web服务器)提供数据,因此您只关心系统本地消息(和日志),而不关心服务数据。或学习语言的程序(在开始课程时,可能不希望安装语言环境,但可能需要安装正确的语言环境,因为需要键入Umlauts(德语)或Kanji(日语)


因此:对于跨平台程序,只需使用用户期望的,因此初始化用户选择的区域设置。因此使用本地化的日期、数字。但不要强制使用区域设置。如果您需要向外部人员(如Web服务器)提供数据,请使用CLDR(系统区域设置……不太适合此任务)。

您确定中的POSIX部分吗“没有保证区域,但是C(这只是在POSIX)”Cppreference说:关于STD::LoaLe::FrLeFun:“获得一个引用C++语言环境的引用,它实现了经典的C”LoLaLISH语义。这个区域不像全局语言环境,不能改变“。“符合标准的实现中的区域设置。是的。
C
是POSIX保证的唯一区域设置