加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 18:28:56 所属栏目:百科 来源:网络整理
导读:假设我有一个RTL语言的字符串,例如阿拉伯语,其中包含一些英语: string s =“Test:?????;?????; a; b” 请注意,字符串中有分号.当我使用Split命令时,如string [] spl = s.Split(‘;’);,然后一些字符串以相反的顺序保存.这是发生的事情: spl [0] =“测试:
假设我有一个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(';');
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读