German Riesenproblem mit ASC und CHR

hogiebaer

Active Member
Licensed User
Longtime User
Hallo Gemeinde,

habe gerade ein Riesen Problem. Bekomme über TCP einen Datensatz geliefert,
der an der 1. Stelle ein Längenbyte besitzt. Soweit, sogut.

Über ASC("Zeichen") lese ich diesen numerisch aus. Nun ist es aber so, dass bestimmte Werte absolut nicht stimmen.

In der Fremdanwendung wird CHR(142) z.B. als "Ä" dargestellt. Lese ich nun
mit ASC("Ä") aus , so ist der Wert 196 !!!!!

Mit Delphi 7.0 gegen getestet, ist es tatsächlich 142.

Einige empfangene Zeichen generieren sogar einen Wert über 65000 !!!!!!!
Verstehe sowieso nicht warum ASC mit einer INT Variablen versehen wurde, da ein Zeichen ja auch nur 0-255 Wertigkeit annehmen kann.

Wie kann ich das kompensieren? Oder ist das ein Fehler im Basic4Android ??

Gruss

Holger
 
Last edited:

specci48

Well-Known Member
Licensed User
Longtime User
Hallo Holger,

Basic4Android arbeitet mit der UTF-8 Kodierung (statt ASCII) und da steht ein "Ä" nun einmal an der Stelle 196.
Dies musst Du bei der Programmierung entsprechend berücksichtigen.
Einfach mal genauer den UTF-8 Zeichensatz ansehen.


Gruß
Specci48
 

hogiebaer

Active Member
Licensed User
Longtime User
Habs gelöst,

hole meine Daten vom TCP-Port nun folgendermassen ab

msg = BytesToString(Buffer, 0, Buffer.Length, "ISO-8859-15")

anstatt

msg = BytesToString(Buffer, 0, Buffer.Length, "UTF-8")

:sign0060:
 
Top