String.Join() 之后,包含英语和希伯来语字母的字符串变得混乱 - C# .NET

String that contains English and Hebrew letters gets messed up after String.Join() - C# .NET

我有一个包含英语和希伯来语字符的字符串:
"Hitachi - היטצ'י:Hitachi – cartel CRT"

第一步:翻转由:分隔的两部分。
预期结果: "Hitachi – cartel CRT:Hitachi - היטצ'י"

下一个:我想连接以下文本:":אגם:עץ תיוק"
最终预期结果: "Hitachi - cartel CRT:Hitachi - אגם:עץ תיוק:היטצ'י"

实际结果: "Hitachi – cartel CRT:Hitachi - היטצ'י:אגם:עץ תיוק"

这是我当前的代码:

string path = "Hitachi - היטצ'י:Hitachi – cartel CRT";
string[] splittedByColonPath = path.Split(':');
Array.Reverse(splittedByColonPath);
List<string> list = new List<string>(splittedByColonPath);
list.Add("אגם:עץ תיוק:");            
string result = String.Join(":", list.ToArray());

关于如何以正确的方式重新排列它有什么想法吗?

String.Join 工作正常,字符串正是您想要的。 (如果你愿意,你可以通过编写一些代码来测试它,每次打印一个字符,每行一个字符。)问题是,当 显示 它时,所有希伯来语文本和冒号被视为一个短语,并且由于希伯来语主要是从右到左,这意味着短语中的第一个单词出现在右侧。

根据您想要实现的目标,这可能没问题(例如,如果您将它传递给另一个需要用冒号分隔数据的程序 - 在这种情况下,字符串可能 看起来 错误,但其他程序会很好地解释它)。但是如果你想让它看起来像你期望的那样,你必须强制显示算法将冒号视为从左到右。您可以通过将代码更改为

来完成此操作
string result = String.Join("\u200e:"), list.ToArray());

\u200e 是一个从左到右的标记 (LRM),它会导致任何相邻的标点符号被视为从左到右。

这样做的缺点是任何其他解释数据的程序可能不会期望 LRM 并且可能会被它混淆。