gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 20:00:03 26 4
gpt4 key购买 nike

假设我有一个 RTL 语言的字符串,例如阿拉伯语,其中夹杂了一些英语:

string s = "Test:لطيف;اليوم;a;b"

注意字符串中有分号。当我使用像 string[] spl = s.Split(';'); 这样的拆分命令时,一些字符串会以相反的顺序保存。这是发生了什么:

spl[0] = "测试:لطيو"
spl[1] = ""اليوم
spl[2] = "a"
spl[3] = "b"

以上内容与原文相比有误。相反,我希望得到这个:

spl[0] = "Test:اليوم"
spl[1] = "لطيوو"
spl[2] = "a"
spl[3] = "b"

我准备编写自己的拆分函数。然而,字符串中的字符也以相反的顺序解析,所以我回到原点。我只想浏览屏幕上显示的每个字符。

最佳答案

正如您的字符串当前所代表的, لطيوم 一词存储在 اليوم 之前;事实上,اليوم 显示在“第一位”(即,更靠左),这只是 Unicode 双向算法在显示文本时的(正确)结果。

即:你开头的字符串(“Test:لطيو٩;اليوم;a;b”)是用户输入“Test:”,然后是لطيو,然后是“;”,然后是اليوم,然后是“”的结果;a;b"。因此,C# 拆分它的方式实际上反射(reflect)了创建字符串的方式。只是它的创建方式并没有体现在字符串的显示上,因为两个连续的阿拉伯语单词在显示时被视为一个单独的单元。

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

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

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

关于c# - 从左到右解析阿拉伯语/RTL 文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12630566/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com