Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Codierungsproblem bei AsyncPro Daten empfangen
ibh_compucat - Di 03.06.14 13:33
Titel: Codierungsproblem bei AsyncPro Daten empfangen
Win8.1, XE5, 32 Bit
Hallo,
bei der Inbetriebnahme von AsyncPro gibt es Probleme, Senden läuft einwandfrei, der Empfänger antwortet auch korrekt, aber der aus den zurückgelieferten Bytes zusammengesetzte (Wide)String liefert mir unleserliches Zeug (unicode oder so etwas?). Hier die Abfrage mit:
Delphi-Quelltext
1: 2: 3: 4:
| procedure TForm1.ApdDataPacket1StringPacket(Sender: TObject; Data: string); begin Form1.edit1.text := Data; end; |
Das Ganze sieht dann so aus:
ㄼㄱ†㤲㌳㠹〰ㄱ‱㈠㌹㤳〸㸰
Lege ich aber ein ADTerminal mit auf die Form, zeigt das mir die korrekten Zeichenfolge an, also ein Kodierungsproblem.
Was kann ich tun, um zu meinem "richtigen" String (<111 23551 ...... >) zu kommen??
Kann mir da jemand bitte einen Tipp geben?
ibh_compucat
Moderiert von
Narses: Code- durch Delphi-Tags ersetzt
WasWeißDennIch - Di 03.06.14 13:39
Data scheint kein String (=UnicodeString ab Delphi 2009), sondern ein AnsiString zu sein. Kannst Du den Parametertyp ändern?
ibh_compucat - Di 03.06.14 13:43
wo kann ich den ändern?
In der Definition der procedure ist Data doch als String deklariert.
ibh_compucat
WasWeißDennIch - Di 03.06.14 13:44
Deshalb ja meine Frage. Ich kenne AsyncPro leider nur dem Namen nach, aber bist Du sicher, dass Du auch die zu Deinem Delphi passende Version installiert hast?
ibh_compucat - Di 03.06.14 13:47
ja, ist 5.00. Ist laut Hersteller für XE5 geeignet.
Die andere Komponente (AdTerminal) funktioniert ja einwandfrei. Ist vom gleichen Hersteller.
ibh_compucat
WasWeißDennIch - Di 03.06.14 14:29
Ein einfacher Typecast wird nichts bringen, da das höherwertige Byte dabei auf der Strecke bleibt. Ich habe daher mal eine Möglichkeit ausprobiert, das Ergebnis scheint stimmig zu sein. Evtl. gibt es auch schon eine fertige Routine dafür, aber die konnte ich auf die Schnelle nicht finden.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| const ORIGINAL: UnicodeString = 'ㄼㄱ†㤲㌳㠹〰ㄱ‱㈠㌹㤳〸㸰'; var s: AnsiString; begin SetLength(s, Length(ORIGINAL) * 2); CopyMemory(@s[1], PWideChar(ORIGINAL), Length(s)); ShowMessage(s); end; |
ibh_compucat - Di 03.06.14 14:54
Das ist die Lösung, läuft super.
Vielen, vielen Dank!
ibh_compucat
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!