c# – 从左到右解析阿拉伯语/ RTL文本
假设我有一个RTL语言的字符串,例如阿拉伯语,其中包含一些英语:
string s =“Test:?????;?????; a; b” 请注意,字符串中有分号.当我使用Split命令时,如string [] spl = s.Split(‘;’);,然后一些字符串以相反的顺序保存.这是发生的事情: spl [0] =“测试:?????” 与原版相比,上述内容无序.相反,我希望得到这个: spl [0] =“测试:?????” 我准备编写自己的分割功能.但是,字符串中的字符也以相反的顺序解析,所以我回到原点.我只想浏览屏幕上显示的每个角色. 解决方法
正如您的字符串当前所示,单词?????存储在单词?????之前;事实上,“首先”(即,在左侧)显示的是“双向”算法在显示文本时的正确结果.
也就是说:你开始的字符串(“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(';'); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |