Unicode-Zeichen haben unterschiedliche Eigenschaften. Diese Eigenschaften können nicht vom Codepunkt abgeleitet werden. Sie brauchen eine Tabelle, die Ihnen sagt, ob ein Charakter eine bestimmte Eigenschaft hat oder nicht.
Sie interessieren sich für Zeichen mit bidirektionaler Eigenschaft "R" oder "AL" (RandALCat).
Ein RandALCat-Zeichen ist ein Zeichen mit eindeutig rechts-nach-links-Direktionalität.
ist die komplette Liste als von Unicode 3.2 (von RFC 3454):
D. Bidirectional tables
D.1 Characters with bidirectional property "R" or "AL"
----- Start Table D.1 -----
05BE
05C0
05C3
05D0-05EA
05F0-05F4
061B
061F
0621-063A
0640-064A
066D-066F
0671-06D5
06DD
06E5-06E6
06FA-06FE
0700-070D
0710
0712-072C
0780-07A5
07B1
200F
FB1D
FB1F-FB28
FB2A-FB36
FB38-FB3C
FB3E
FB40-FB41
FB43-FB44
FB46-FBB1
FBD3-FD3D
FD50-FD8F
FD92-FDC7
FDF0-FDFC
FE70-FE74
FE76-FEFC
----- End Table D.1 -----
Hier einige Code, um die vollständige Liste als von Unicode 6.0 zu erhalten:
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"));
}
Beachten Sie, dass diese Werte sind Unicode-Codepunkte. Zeichenfolgen in C# /. NET sind UTF-16-codiert und müssen zuerst in Unicode-Codepunkte konvertiert werden (siehe Char.ConvertToUtf32). Hier ist eine Methode, die überprüft, ob eine Zeichenfolge enthält mindestens einen RandALCat Charakter:
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;
}
Danke dafür !! Ich habe mich nur gefragt, was Sie von Brent denken? –
@Patrick Kluge: Die Regex-Engine enthält anscheinend eine solche Tabelle mit Unicode-Eigenschaften. Aber ich sehe keine benannten Blöcke für alle RandALCat-Zeichen. Es hängt also von der Korrektheit ab, die Sie benötigen: Wenn Sie Arabisch und Hebräisch sowie einige andere Zeichen für gut genug halten, sollten Sie reguläre Ausdrücke verwenden. Wenn Sie ein vorhandenes RandALCat-Zeichen erkennen müssen, erstellen Sie Ihre eigene Tabelle und überprüfen Sie die Eingabezeichenfolge selbst, wie oben gezeigt. – dtb
Ich frage mich, was Sie von dem ۞-Symbol, das von Software-Produkten wie Google Chrome und MS Word als rechts-nach-links behandelt wird, aber nicht als RandALCat in der Unicode-Spezifikation gekennzeichnet ist. –