如何在字符串中包含数字以不转换为另一种语言(例如阿拉伯语)

dam*_*hab 5 c# string.format

我有这样的代码..

string text1 = "more text";
string text2 = string.Format("some text plus {0}", text1);
Run Code Online (Sandbox Code Playgroud)

我将其转换为阿拉伯语:

string text1 = "?????? ?? ????";
string text2 = string.Format("??? ???? ???????? ??? {0}", text1);
Run Code Online (Sandbox Code Playgroud)

到目前为止没有问题!

然后我将计算机的语言从英语切换到阿拉伯语并查看代码,数字已自动更新为阿拉伯数字......

string text1 = "?????? ?? ????";
string text2 = string.Format("{.} ??? ?????? ???????? ???", text1);
Run Code Online (Sandbox Code Playgroud)

(我不得不使用句点来捏造这一点,但是对于这个例子来说,0 的阿拉伯符号看起来足够相似)。

问题是,当 Windows 选择的语言是阿拉伯语时,我收到字符串格式异常错误,因为 Format 命令无法识别阿拉伯语符号为零。

具体来说,我的问题是:即使在非拉丁语言中,您如何确保输入的零仍然是拉丁数字?或者我怎样才能让它正常工作而不会出错?

编辑:

直接从 IDE 剪切和粘贴:第一个 Windows 设置为英语,第二个图片,相同的代码,阿拉伯语...

英语

阿拉伯

dam*_*hab 0

最终解决方案,感谢所有提出评论的人。

\n

我交换了所有标签{0}并替换为string.Format(CultureInfo.InvariantCulture, "{0}", "{0}")

\n

所以现在我上面给出的例子看起来像......

\n
string text1 = "\xd8\xa7\xd9\x84\xd9\x85\xd8\xb2\xd9\x8a\xd8\xaf \xd9\x85\xd9\x86 \xd8\xa7\xd9\x84\xd9\x86\xd8\xb5";\nstring text2 = string.Format(String.Format(CultureInfo.InvariantCulture, "{0}", "{0}")  + " \xd8\xa8\xd8\xb9\xd8\xb6 \xd8\xa7\xd9\x84\xd9\x86\xd8\xb5\xd9\x88\xd8\xb5 \xd8\xa8\xd8\xa7\xd9\x84\xd8\xa5\xd8\xb6\xd8\xa7\xd9\x81\xd8\xa9 \xd8\xa5\xd9\x84\xd9\x89", text1);\n
Run Code Online (Sandbox Code Playgroud)\n

Windows 将语言设置为阿拉伯语时实际代码的屏幕截图:

\n

在此输入图像描述

\n

看来,通过以这种方式使用 string.Format,标签不会恢复为阿拉伯符号,并且当每个属性放入其自己的 string.Format 中时,它运行时不会产生错误。

\n

我仍然不知道为什么我必须经历所有这些麻烦,就像上面的评论一样,无论如何它都应该有效。如果我见过的话,这对我来说是一次重大的黑客攻击!

\n

我确实在二级标签上犯了一个最初的错误。我换出了 {1} 并替换为string.Format(CultureInfo.InvariantCulture, "{1}", "{1}"). 当然,这是一个子字符串。格式化命令,它仍然只有一个标签。通过执行以下操作纠正了愚蠢的错误...

\n

string.Format(CultureInfo.InvariantCulture, "{0}", "{1}")

\n