2014-02-10 4 views
5

Ich habe eine arabische Zeichenfolge. Zum Beispiel: رامات راحيلArabische Saite: Holen Sie sich aktuelle Glyph (kontextuelle Shaping)

In Arabisch hat derselbe Buchstabe eine andere Glyphe entsprechend der Buchstabenposition. Also Brief Lam ist á la Isolated oder Initial, während á ist, wenn es medial oder final ist.

Wenn ich die ursprüngliche Zeichenfolge (.NET) in einem Char-Array transformieren, werden alle Zeichen als isoliert zurückgegeben.

Ist es möglich, die tatsächlichen Glyphen zu haben?

Ich muss arabische Zeichen "übersetzen" und sie an ein Gerät senden. So hat ل zum Beispiel den Code 128, während ل den Code 129 hat. Die Übersetzungstabelle ist benutzerdefiniert.

Es ist egal, wie ich das Zeichen bekommen, in allen Fällen, sie als isoliertes zurückgegeben werden:

Dim a As String = "رامات راحيل" 
Dim ar As Char() = a.ToCharArray 

For Each c As Char In ar 
    Console.WriteLine(c) 
Next 

For i As Integer = 0 To a.Length - 1 
    Console.WriteLine(a.Substring(i, 1)) 
Next 

For i As Integer = 0 To a.Length - 1 
    Console.WriteLine(a.Chars(i)) 
Next 

Mein understading ist, dass der Code die gleichen, aber die Form ist anders. Siehe Par. Kontexterstellung http://msdn.microsoft.com/en-us/goglobal/bb688137.aspx

+0

Zum besseren Verständnis finden zu bekommen, warum brauchen Sie es in die zu transformieren char Array, anstatt es als String zu halten? –

+0

Ich muss arabische Zeichen "übersetzen" und sie an ein Gerät senden. Also hat ل Code 128 (zum Beispiel), während ل Code 129 hat. – Matte

+0

Wie hast du dich in das Char-Array aufgeteilt? – ZoolWay

Antwort

0

Sie verlieren die Information über die Position beim Konvertieren in ein Char-Array. Offensichtlich sind alle Zeichen isoliert und können daher überall verwendet werden. Interessant, dass für ein Schreiben es einen Unterschied macht (lernen Sie jeden Tag etwas Neues).

Sie haben zwei Möglichkeiten:

  • Speichern ein anderes Array für jedes Zeichen und speichern, wenn die char Anfangs war, allein, medial oder endgültig.
  • Führen Sie die Übersetzung in das Array selbst aus. Da Sie hier auf der Website zwei verschiedene UTF-8-Zeichen eingeben konnten, muss ein separater UTF-8-Char vorhanden sein. Sehen Sie sich also Ihre Zeichenfolge an und erstellen Sie einen eigenen Char-Array-Ersteller, der versteht, wann er den einen oder anderen Charakter verwenden soll.
+0

Mein Understading ist, dass Char das gleiche ist, nur die Glyphe ist anders: http://msdn.microsoft.com/en-au/goglobal/bb688137.aspx (siehe Par. Kontextuelle Gestaltung) – Matte

+0

Okay, ich sehe. Das geht noch weiter, als ich es gewusst habe. Ich schätze, Sie müssen etwas wie die erste Option tun, aber nicht sicher, wie Sie das richtig behandeln könnten. – ZoolWay

0

Tatsächlich ist es GetCharacterPlacement von GDI, ScriptShape von Uniscribe oder GetGlyphs von DirectWrite IDWriteTextAnalyzer, die dies tun. Alternativ können Sie, da es sich nicht nur um Glyphen, sondern um alternative Zeichen handelt, die im Unicode-Standard im arabischen Darstellungsbereich definiert sind, einfach Ihre eigene Übersetzungstabelle erstellen. Achten Sie jedoch darauf, diakritische Symbole bei der Bestimmung von initial, final, medial oder isoliert zu ignorieren.

0

Es gibt eine vollständige Lösung für dieses Problem.Es besteht aus einer Datei Glyphe Definition sowie eine CPP Nutzenfunktion die tatsächlichen Glyphen mit char-Codes

bitte weitere Informationen und Download der Dateien from here