Wie erhält man einen einzelnen arabischen Buchstaben in einer Zeichenkette mit seinem Unicode-Umwandlungswert in DELPHI?

8

Betrachten wir dieses arabische Wort (جبل) aus 3 Buchstaben.

- der erste Buchstabe ist, -name ist (ǧīm), -sein Unicode-Wert ist FE9F, wenn es am Anfang ist, -sein Grundwert ist 062C und -s isolierter Wert ist FE9D, aber die letzten beiden Werte geben die gleiche Form wieder, die Zeichnung zeigt.

Nun, wenn ich versuche, es als ein einzelnes Zeichen zu erhalten - auf viele verschiedene Arten -, gibt Delphi den grundlegenden Unicode-Wert zurück. Nun, das macht Sinn, aber was passiert mit dem Char mit Transformation? Es ist auch ein einzelnes Zeichen. Es sieht so aus, als würde es den transformierten Wert nur dann annehmen, wenn es innerhalb einer Zeichenkette liegt, aber wo? Wie extrahiert man? Wann und welcher Prozess entscheidet über diese Werte? Wieder die Hauptfrage: Wie kann ich den arabischen Buchstaben oder seinen Unicode-Wert innerhalb einer Zeichenfolge erhalten?

nur zur Information: Im Gegensatz zu Englisch, das Anhänger für seine Buchstaben hat (Groß und Klein), hat Arabisch vier Fälle (Isoliert, Anfang, Mitte und Ende) mit anderen Regeln.

    
Hasan 15.05.2013, 03:58
quelle

3 Antworten

3

Ich bin mir nicht sicher, ob ich die Frage verstehe. Wenn Sie wissen möchten, wie Sie U + FE9F im Delphi-Quellcode in einer modernen Unicode-Version von Delphi schreiben können. Tun Sie das einfach so:

%Vor%

Wenn Sie einzelne Zeichen aus جبل lesen möchten, dann tun Sie es wie folgt:

%Vor%

Beachten Sie, dass der obige Code für Ihr bestimmtes Wort in Ordnung ist, da jeder Codepunkt mit einem einzelnen UTF-16 WideChar -Zeichenelement codiert werden kann. Wenn für den Codepunkt mehrere Elemente erforderlich sind, empfiehlt es sich, für die Verarbeitung auf Codepunktsebene in UTF-32 zu konvertieren.

Sehen wir uns nun die Zeichenfolge an, die Sie in die Frage eingefügt haben. Ich habe diese Frage mit wget heruntergeladen und die Datei, die über die Drähte kam, war UTF-8-codiert. Ich habe Notepad ++ verwendet, um in UTF16-LE zu konvertieren, und dann die drei UTF-16-Zeichen der Zeichenfolge ausgewählt. Sie sind:

%Vor%

Sie haben gesagt:

  

Der erste Buchstabe ist, der Name ist (ǧīm), sein Unicode-Wert ist U + FE9F.

Aber das ist einfach falsch. Wie Sie oben sehen können, war der tatsächliche Charakter, den Sie gepostet haben, U + 062C. Der Grund, warum Ihre Versuche, den ersten Zeichensatz U + 062C zu lesen, ist, dass U + 062C wirklich das erste Zeichen Ihrer Zeichenkette ist.

Die Quintessenz ist, dass nichts in Ihrem Delphi-Code Ihren Charakter verändert. Wenn du es tust:

%Vor%

Der Compiler führt eine einfache Zwei-Byte-Kopie aus. Es gibt keine kontextsensitive Transformation, die auftritt. Und ebenso beim Lesen von S[1] .

Sehen wir uns an, wie diese Zeichen angezeigt werden, indem Sie diesen einfachen Code in einer VCL-Formularanwendung verwenden, die ein Memo-Steuerelement enthält:

%Vor%

Die Ausgabe sieht folgendermaßen aus:

Wie Sie sehen können, weiß der Rendering-Layer, was mit einem U + 062C-Zeichen geschehen soll, das am Anfang des Strings erscheint.

    
David Heffernan 15.05.2013 08:08
quelle
0

Ich denke nicht, dass Sie es mit string / char verwandten Methoden machen können. Aber mit pchar können Sie vielleicht auf den Speicher zugreifen und die Pword-Werte direkt lesen

EDIT: Nachdem ich mit David gesprochen habe, denke ich, dass Sie immer den grundlegenden / isolierten Wert des Buchstabens erhalten werden. Die Tatsache, dass ein Glyph für Anfang oder Ende verwendet wird, wird wahrscheinlich nur vom Anzeigerahmen des Betriebssystems behandelt.

    
FileVoyager 15.05.2013 10:36
quelle
0

Die Gestaltung arabischer Zeichen für die Präsentation in Windows wird von den Uniscribe-Diensten (USP10.dll) bedient. UniScribe

Sie können den folgenden Blogeintrag nützlich finden: Roozbehs Programmier-Blog

    
HMcG 15.05.2013 22:22
quelle

Tags und Links