gpt4 book ai didi

c# - 如何检测一个字符是否属于从右到左的语言?

转载 作者:IT王子 更新时间:2023-10-29 04:18:30 26 4
gpt4 key购买 nike

判断字符串是否包含从右到左语言的文本的好方法是什么。

我找到了这个question这建议采用以下方法:

public bool IsArabic(string strCompare)
{
char[] chars = strCompare.ToCharArray();
foreach (char ch in chars)
if (ch >= '\u0627' && ch <= '\u0649') return true;
return false;
}

虽然这可能适用于阿拉伯语,但这似乎并不涵盖其他 RTL 语言,例如希伯来语。是否有一种通用方法可以知道特定字符属于 RTL 语言?

最佳答案

Unicode 字符具有不同的属性。这些属性不能从代码点派生;您需要一个表格来告诉您某个角色是否具有某个属性。

您对具有双向属性“R”或“AL”(RandALCat) 的字符感兴趣。

A RandALCat character is a character with unambiguously right-to-left directionality.

这是 Unicode 3.2 的完整列表(来自 RFC 3454 ):

D. Bidirectional tablesD.1 Characters with bidirectional property "R" or "AL"----- Start Table 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----- End Table D.1 -----

Here's some code to get the complete list as of Unicode 6.0:

var url = "http://www.unicode.org/Public/6.0.0/ucd/UnicodeData.txt";

var query = from record in new WebClient().DownloadString(url).Split('\n')
where !string.IsNullOrEmpty(record)
let properties = record.Split(';')
where properties[4] == "R" || properties[4] == "AL"
select int.Parse(properties[0], NumberStyles.AllowHexSpecifier);

foreach (var codepoint in query)
{
Console.WriteLine(codepoint.ToString("X4"));
}

请注意,这些值是 Unicode 代码点。 C#/.NET 中的字符串是 UTF-16 编码的,需要先转换为 Unicode 代码点(参见 Char.ConvertToUtf32 )。这是一种检查字符串是否至少包含一个 RandALCat 字符的方法:

static void IsAnyCharacterRightToLeft(string s)
{
for (var i = 0; i < s.Length; i += char.IsSurrogatePair(s, i) ? 2 : 1)
{
var codepoint = char.ConvertToUtf32(s, i);
if (IsRandALCat(codepoint))
{
return true;
}
}
return false;
}

关于c# - 如何检测一个字符是否属于从右到左的语言?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4330951/

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