如何检查阿拉伯/波斯字符是否为小写?

时间:2019-06-11 09:24:27

标签: c# .net string char

小写/大写的概念在英语和某些RTL语言(如阿拉伯语/波斯语)中略有不同,我想检查一下波斯语/阿拉伯语字符是大还是小。

我尝试了char.IsLower方法,但不适用于RTL语言。

请参见以下代码段:

             string mainString = "مرحبا";
             char[] arr = mainString.ToCharArray();
             bool Lcase= char.IsLower(arr[3]);

我想知道第四个字母(右边)是小还是大? 但是Lcase总是为假,而必须为真。

在这些语言中,我什至都听不到一个小写字母,因为arr[3].ToString()始终是大写字符(“ب”)。

please look at this image

5 个答案:

答案 0 :(得分:1)

您需要首先对字符串进行整形,整形意味着将文本字符转换为其字形,例如:

  

ﺴ ﻢ ﻢ

然后为字母创建一个映射并比较它们以了解它是什么字符。有一些诸如iTextPDF之类的库,它们具有ArabicLigaturizer类,可让您重塑阿拉伯语/波斯语字符串。

要创建映射,您可以从以下库中获取帮助:

  1. python-arabic-reshaper
  2. js-arabic-reshpaer
  3. Reshape Arabic letters for Designers

我什至在github用了一个.net代码来重塑我的其中一个免费工具。

答案 1 :(得分:0)

尝试将LTR转换为RTL的方法:

string mainString = "مرحبا";
char[] arr = mainString.Reverse().ToArray();
bool Lcase= char.IsLower(arr[3]);

也就是说,正如@Martin在评论中指出的那样,阿拉伯语(和波斯语字母均没有)没有大写字母,因此,如果mainString仅包含阿拉伯语/波斯语,则Lcase的值将始终为false。如果您想使用RTL并检查是否存在大写字母(例如,包含西方字母的文本,例如某些公司或产品的名称,甚至是URL),上面的代码仍然可以使用。

答案 2 :(得分:0)

在阿拉伯语中,没有什么叫大写或小写,这只是一种情况,我认为IsLower方法在内部使用了正则表达式,就像将其与[A-Z]正则表达式匹配一样,所以总是将其始终为False

答案 3 :(得分:0)

我想知道是否有可能。即使我强制使用大写或小写字母,我也具有相同的ASCII代码。

    TextInfo myTI = new CultureInfo("ar-DZ",false).TextInfo;

    string mainString = "مرحبا";
    char[] arr = mainString.ToCharArray();

    Console.WriteLine((int)myTI.ToLower(arr[3]));

    Console.WriteLine(char.IsLower(myTI.ToLower(arr[3])));

    Console.WriteLine((int)myTI.ToUpper(arr[3]));

    Console.WriteLine(char.IsLower(myTI.ToUpper(arr[3])));

    string word = "word";
    arr = word.ToCharArray();           
    Console.WriteLine((int)arr[3]);     

    Console.WriteLine(char.IsLower(arr[3]));

    word = "WORD";
    arr = word.ToCharArray();                  
    Console.WriteLine((int)arr[3]); 

    Console.WriteLine(char.IsLower(arr[3]));

预期结果

1576

错误

1576

错误

100

68

错误

答案 4 :(得分:0)

万岁!

我自己发明了!一个简单的解决方案。 :)

我的解决方案:

如果下一个字母不存在或为空/空格,则该字母为大号,否则为小/中间字符。

似乎可行。

更新: 不幸的是,该解决方案仅适用于波斯语,不适用于所有阿拉伯语情况。所以我接受了阿里·巴赫拉米(Ali Bahrami)的回答。