问题标签 [invariantculture]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
75 浏览

c# - 具有不同文化的 DateTime.TryParse

我有两个日期如下,并且我的当地文化是“en-IN”

如果我使用 Invariant Culture 运行以下代码,则日期将使用 enUSDate 进行解析。

要解决以下问题是我正在使用的代码,它正在解析每种文化的日期。

如果它仅因不变文化而失败,它将转到当前并且对于 UI 文化相同

所以想问一下这样做是否合适?或者有没有其他办法?

0 投票
1 回答
93 浏览

c# - C# 中开尔文符号 (K) 的 ToLowerInvariant 具有不同的结果

当我像这样定义开尔文符号(http://www.unicode-symbol.com/u/212A.html)时:

并做一个控制台写行:

我在一台 PC 上得到这个输出:

  • K - k=>ToLower=True - K=>ToLowerInvariant=False

在另一台电脑上我得到:

  • K - k=>ToLower=True - k=>ToLowerInvariant=True

这表明ToLowerInvariant()方法的工作方式不同?


笔记

  • 在两个系统上Thread.CurrentThread.CurrentCultureThread.CurrentThread.UICurrentCulture是相同的:"en-US"
  • 两者都在运行net5.0

有效的更新
系统具有以下设置:

  • 操作系统 =“Windows 10 专业版”

不工作的系统有以下设置:

  • OS =“Windows Server 2019”(实际上这是来自 Azure 的构建代理)
0 投票
2 回答
94 浏览

c# - 如何强制 .Net ToString 使用给定的 Globalization / CultureInfo

我正在使用一个 .Net Core 6 库 (dll),其中除其他功能外,数字和日期/时间信息以字符串形式输出,并且此代码需要全球化,即。要有文化意识。图书馆是一个文档生成系统,所以在同一个应用程序会话中,用户会为 de-CH、de-FR、en-US 等生成文档。所以基本上,我们希望图书馆具有文化意识,但是输出的文化应该具有“标准”格式,而不是在操作系统级别或用户级别定制的格式。

例如对于十进制值,库代码使用这些方法来输出内容:

因此,不同用户在具有不同区域性设置的不同计算机中调用这些重载,将以不同方式格式化输出:小数分隔符可以是逗号或点,而千位分组分隔符可能是非制动空格或 ' 等。

但是,当provider使用特定文化的实例显式传递参数时,例如“fr-CH”(瑞士-法语)和 CultureInfo.UseUserOverride == false,我期待始终相同的输出字符串,独立于用户和/或电脑。所以,我在想,.Net 对于所有文化类型的 CultureInfo-instances 的所有属性都有“内置”值,并且通过参数useUserOverride: false我可以强制格式化使用这些“内置”值,因此会输出总是相同的字符串。

但这似乎并非如此!

编码:

此示例代码是使用 .Net Core 6 作为控制台应用程序编译的,我在 a) Windows 10 Pro PC 和 b) Windows Server 2012R2 上运行它,它们具有不同的输出。

  • 法国-CH/Windows Pro 10 PC:-123 456 789 123 456,9877
  • 法国-CH/Windows Server 2012R2:-123'456'789'123'456.9877

通过设置相同CultureInfo cultInfo = CultureInfo.InvariantCulture:然后结果看起来总是相同的,这是预期的。

我也尝试设置Thread.CurrentThread.CurrentCultureThread.CurrentThread.CurrentUICulture使用cultInfo上面的 -variable 然后调用ToString(format?, provider?),但没有效果:结果与没有设置CurrentThread. PS。我实际上从这里这里这里了解到,设置Thread.CurrentThread.CurrentUICulture与格式无关(我的情况),而是与翻译(resx 的东西)有关。

我知道有关-class的大量 Microsoft 文档CultureInfo,但我无法从那里的森林中看到树。

我的问题如下:

  • 任何版本的 .Net Core(或任何版本的 .Net Framework)是否有所有 CultureInfo 属性的“内置值”?
  • 我怎么能强制我的代码始终完全使用与环境无关的文化给定的文化?

这对于能够以可靠的方式对库输出进行单元测试非常重要。

这可能很重要,当读回(使用 System.Convert(value, provider?) 任何用户在任何计算机上输出的值时(只知道它们输出的文化)。

0 投票
3 回答
37 浏览

c# - 带有小数点分隔符的值如何与 ToString 和 CultureInfo.InvariantCulture 设置一起用于非英语语言环境

我有一个简单的用例,我正在使用将德语设置为系统区域设置(区域格式为德语以及当前系统区域设置为德语)的系统。

例如

我原以为将 InvariantCulture 与 ToString 一起使用会产生一种文化中性格式,例如“0.123”,但它不会!