c# – 从左到右解析阿拉伯语/ RTL文本

前端之家收集整理的这篇文章主要介绍了c# – 从左到右解析阿拉伯语/ RTL文本前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
假设我有一个RTL语言的字符串,例如阿拉伯语,其中包含一些英语:

string s =“Test:لطيفة;اليوم; a; b”

请注意,字符串中有分号.当我使用Split命令时,如string [] spl = s.Split(‘;’);,然后一些字符串以相反的顺序保存.这是发生的事情:

spl [0] =“测试:لطيفة”
spl [1] =“”اليوم
spl [2] =“a”
spl [3] =“b”

与原版相比,上述内容无序.相反,我希望得到这个:

spl [0] =“测试:اليوم”
spl [1] =“لطيفة”
spl [2] =“a”
spl [3] =“b”

我准备编写自己的分割功能.但是,字符串中的字符也以相反的顺序解析,所以我回到原点.我只想浏览屏幕上显示的每个角色.

解决方法

正如您的字符串当前所示,单词لطيفة存储在单词اليوم之前;事实上,“首先”(即,在左侧)显示的是“双向”算法在显示文本时的正确结果.

也就是说:你开始的字符串(“Test:لطيفة;اليوم; a; b”)是用户输入“Test:”,然后是لطيفة,然后是“;”,然后是“اليوم”,然后是“; a; b”.因此,C#分割它的方式确实反映了创建字符串的方式.只是它的创建方式没有反映在字符串的显示中,因为两个连续的阿拉伯语单词在显示时被视为一个单元.

如果你想要一个字符串以从左到右的顺序显示阿拉伯语单词,中间用分号,同时也按照相同的顺序存储单词,那么你应该在之后放置一个从左到右的标记(U 200E)分号.这将有效地将每个阿拉伯语单词分割为其自己的单元,然后双向算法将分别处理每个单词.

例如,以下代码以与您使用的字符串相同的字符串开头(添加了单个“从左到右”标记),但它会根据您期望的方式将其拆分(即,spl [0] =“Test:اليوم”,spl [1] =“لطيفة”):

static void Main(string[] args) {
    string s = "Test:اليوم;\u200Eلطيفة;a;b";
    string[] spl = s.Split(';');
}

猜你在找的C#相关文章