Forums Neueste Beiträge
 

Zeichenkonvertierung aus griechisch in Hey-Darstellung

19/11/2007 - 09:36 von Henning Winkler | Report spam
Hallo zusammen,

ich habe eine Zeile mit griechischem Text und diese möchte ich gerne
derart zerlegen, daß ich zu jedem Zeichen das Hex-Zeichen suche und
diese dann nacheinander aufliste. In der Zeichentabelle kann ich ja
diese Zeichen ja sehen inklusive des zugehörigen Codes. Kann mir
jemand einen Tip geben, wie ich an die Hex-Codierung jedes Zeichens
komme ? Mit Hex() alleine ists ja nicht getan, für ein Zeichen wie das
Σ wird in der Zeichentabelle der Code U+03A3 angezeigt aber bei der
Interpretation der einzelnen Bytes des Originalzeichens bekomme ich
kein 03A3 raus...
Vielen Dank schon mal.

Gruß Henning
 

Lesen sie die antworten

#1 Thorsten Albers
19/11/2007 - 13:11 | Warnen spam
Henning Winkler schrieb im Beitrag
...
ich habe eine Zeile mit griechischem Text und diese möchte ich gerne
derart zerlegen, daàŸ ich zu jedem Zeichen das Hex-Zeichen suche und
diese dann nacheinander aufliste. In der Zeichentabelle kann ich ja
diese Zeichen ja sehen inklusive des zugehörigen Codes. Kann mir
jemand einen Tip geben, wie ich an die Hex-Codierung jedes Zeichens
komme ? Mit Hex() alleine ists ja nicht getan, fà¼r ein Zeichen wie das
Σ wird in der Zeichentabelle der Code U+03A3 angezeigt aber bei der
Interpretation der einzelnen Bytes des Originalzeichens bekomme ich
kein 03A3 raus...



Hier scheint einigermaßen Verwirrung zu herrschen...
Ein Zeichen hat kein 'Hex-Zeichen' und keine 'Hex-Codierung', ein Zeichen
hat einen Zeichencode. VB verwendet Unicode-kodierte Strings, d.h. für
jedes Zeichen werden (mind.) 2 Bytes verwendet (z.B. '03A3'). Aus
Kompatibilitàtsgründen kann VB allerdings auch mit
1-Byte-Zeichencodierungen (ANSI/ASCII) umgehen, weswegen für Befehle, die
auf die einzelnen Zeichen eines Strings zugreifen, vielfach eine Unicode-
und eine ANSI-Variante existiert. Die ANSI-Variante ist dabei der 'normale'
Befehl, die Unicode-Variante der 'normale' Befehl mit dem Suffix "W"
erweitert, also z.B. Chr$() und ChrW$(), Asc() und AscW().

MyString$ = ChrW$(&H3A3)

'3A3' sollte angezeigt werden, wenn Du aus dem String, der dieses Zeichen
enthàlt, den Zeichencode mit AscW() dezimal ausliest, dann mit Hex$() in
einen Hexadezimalzahlen-String umwandeln làßt.

Debug.Print "0x" & Hex$(AscW(Mid$(MyString$, 1, 1)))
-> 0x3A3

Liest Du den Zeichencode stattdessen mit Asc() aus und làßt dann den
Hexadezimalzahlen-String erstellen, wird intern 2-Byte-Unicode-Zeichencode
in einen 1-Byte-ANSI-Zeichencode (je nach aktiver ANSI-Codepage)
umgewandelt, wobei die Auswahl eines passenden Wertes manchmal sehr
'unschönen' Regeln folgt.

Debug.Print "0x" & Hex$(AscW(Mid$(MyString$, 1, 1)))
-> 0x53
= 'S', weil U+03A3 der griech. Großbuchstabe Sigma ist.

-
THORSTEN ALBERS Universitàt Freiburg
albers@
uni-freiburg.de
-

Ähnliche fragen