如何检测一个字符是否属于从右到左的语言?判断字符串是否包含“从右到左”语言的文本的好方法是什么。我发现这个问题建议采用以下方法:publicboolIsArabic(stringstrCompare){char[]chars=strCompare.ToCharArray();foreach(charchinchars)if(ch>='u0627'&&ch<='u0649')返回真;返回假;虽然这可能适用于阿拉伯语,但这似乎并未涵盖其他RTL语言,例如希伯来语。有没有一种通用的方法可以知道特定字符属于RTL语言?Unicode字符具有不同的关联属性。这些属性不能从代码点派生;您需要一个表格来告诉您某个角色是否具有特定属性。您对具有双向属性“R”或“AL”(RandALCat)的字符感兴趣。RandALCat字符是具有明确的从右到左方向性的字符。这是Unicode3.2的完整列表(来自RFC3454):D.双向表D.1具有双向属性“R”或“AL”的字符-----起始表D.1-----05BE05C005C305D0-05EA05F0-05F4061B061F0621-063A0640-064A066D-066F0671-06D506DD06E5-06E606FA-06FE0700-070D07100712-072C0780-07A507B1200FFB1DFB1F-FB28FB2A-FB36FB38-FB3CFB3EFB40,FB41FB43,FB44FB46-FBB1FBD3-FD3DFD50-FD8FFD92-FDC7FDF0-FDFCFE70-FE74FE76-FEFC-----表D.1-----这里是Unicode6.0的完整列表一些代码:varurl="http://www.unicode.org/Public/6.0.0/ucd/UnicodeData.txt";varquery=fromrecordinnewWebClient().DownloadString(url).Split('n')where!string.IsNullOrEmpty(record)letproperties=record.Split(';')whereproperties[4]=="R"||properties[4]=="AL"选择int.Parse(properties[0],NumberStyles.AllowHexSpecifier);foreach(varcodepointinquery){Console.WriteLine(codepoint.ToString("X4"));}请注意,这些值是Unicode代码点。C#/.NET中的字符串是UTF-16编码的,需要先转换为Unicode代码点(请参阅Char.ConvertToUtf32)。这是一种检查字符串是否包含至少一个RandALCat字符的方法:staticvoidIsAnyCharacterRightToLeft(strings){for(vari=0;i你可以尝试在你的正则表达式中使用“命名块”。只需从Right-to-left块,然后形成正则表达式。例如:p{IsArabic}|p{IsHebrew}如果此正则表达式返回true,则字符串中至少有一个希伯来语或阿拉伯语字符。Unicode6.0全部为“AL”或“R”(来自http://www.unicode.org/Public/6.0.0/ucd/UnicodeData.txt)boolhasRandALCat=0;if(c>=0x5BE&&c=0xFB1D){if(c==0xFB1D)hasRandALCat=1;elseif(0xFB1F编辑:这就是我现在使用的,包括元音字符和希伯来语和阿拉伯语中的所有内容:[u0591-u07FF]旧答案:如果你需要检测句子中的RTL语言,这个简化的RegEx可能就足够了:[?-?-¢]如果你想用希伯来语写东西,你必须使用其中一个字符,类似于阿拉伯语的大小写。它不包括元音字符,所以如果你需要捕获所有整个单词或绝对所有RTL字符,您最好使用其他答案之一。希伯来语中的元音化特征在非诗歌文本中非常罕见。我不懂阿拉伯语。以上是C#学习教程:如何检测一个字符是否属于从右到左的语言?分享的所有内容,如果对大家有用,需要进一步了解C#学习教程,还望大家多加关注---本文整理自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
