使用相同的 CultureInfo 时,不同计算机上的格式不同,为什么?

Different formatting on different computers when using the same CultureInfo, why?

我在使用 CultureInfo 时遇到问题。

这基本上是我的代码:

Console.WriteLine(0.5.ToString("P2", new CultureInfo("en-US")));

当运行时,这是我在两台不同的电脑上得到的:

如您所见,格式不一样。澳大利亚 VPS(运行 Windows Server 2016)与我的计算机相比(Windows 10)在百分号前有一个 space。

为什么?我怎样才能 "really" 在所有地方使用相同的 CultureInfo/格式?

Windows 上的 CultureInfo 使用 machine/user 级别的语言环境信息,它自己没有任何信息。 OS 版本和更新相对频繁地更新此信息。结果,具有不同级别补丁或不同版本 OS 的机器可能会有差异,通常如您所见很小,但有时如果小数分隔符之类的东西在“.”之间发生变化,则可能会很关键。和“,”或区域的货币符号发生变化。

通常这不是问题,因为这种格式仅用于来自用户的 show/parse 值,而不用于将数据存储在任何地方(使用 InvariantCulture)。大多数个人用户永远不会使用足够多的机器来注意到桌面应用程序的差异。对于服务器端代码(即 ASP.Net),运行 具有不同版本 OS 的多个服务器的可能性更小。

如果您确实必须显示与 OS 无关的相同格式,则必须为您感兴趣的语言环境构建自己的 CultureInfo 对象。在许多情况下,您可以根据 CultureInfo 创建自己的 CultureInfo现有的一个,只是修补您关心的属性。