String.Format在阿拉伯语中没有正确转换整数

Ken*_*son 9 c# string formatting cultureinfo

我有String.Format的问题.除了第一个整数之外,以下代码正确格式化了字符串.目前的文化被定为伊拉克阿拉伯语(ar-IQ):

int currentItem= 1;
string of= "??";
int count = 2;
string formatted = string.Format(CultureInfo.CurrentCulture, "{0}{1}{2}", currentItem, of, count);
Run Code Online (Sandbox Code Playgroud)

文本从右到左格式化,2转换为阿拉伯数字,但1不是.

有任何想法吗?

Ste*_*ins 3

转换数值的默认行为是“上下文”,这基本上意味着如果数字以阿拉伯语进行,则它们以阿拉伯语(或另一个“非拉丁”字符)显示,如果不是,则它们以“标准”欧洲显示数字。

不过,您可以很容易地改变这种行为:

var culture = CultureInfo.CurrentCulture;
culture.NumberFormat.DigitSubstitution = DigitShapes.NativeNational; // Always use native characters
string formatted = string.Format(culture, "{0:d}{1:d}{2:d}", currentItem, of, count);
Run Code Online (Sandbox Code Playgroud)

这应该如您所期望的那样工作 - 有关MSDN 的更多详细信息。

  • MSDN 上已声明“DigitSubstitution”没有任何效果,保留供将来使用:https://msdn.microsoft.com/en-us/library/system.globalization.numberformatinfo.digitsubstitution.aspx。这个解决方案是如何运作的? (3认同)
  • 此代码确实失败并显示“InvalidOperationException:实例是只读的”。除非你的代码将 `CurrentCulture` 设置为非只读(例如 `...CurrentThread.CurrentCulture = new CultureInfo("fr-fr")` )并且正如 @Isaac 指出的那样,即使在你获得运行 `DigitSubstitution` 的代码之后对结果没有影响...工作示例可能有用,即 www.ideone.com ... (3认同)