Hallo,
leider habe ich bisher kein Thema gefunden was mir bis jetzt wirklich geholfen hat.
In der Delphi XE5 habe ich folgendes Problem:
Ich habe eine Anwendung die Strigs über eine
TCP-Verbindung an eine Gegenstelle schickt. Ich habe das ganze so gehalten, dass ich die Strings ohne Probleme mit der TEncoding Klasse konvertieren und über die Leitung schicken kann. Alles kein Problem solange beide Seiten die gleiche Konvertierung nutzen (
ASCII, UTF8 etc.). Das ganze wird Dynamisch zur Laufzeit je nach Konfiguration geschaltet.
Jetzt habe ich das Problem mit Abwärtskompatibilitäten. Wenn ich Zeichen in den Strings habe und diese nicht in der Codepage der Gegenstelle existieren, weil diese z.B. nur
ASCII bis 127 kann, kommt bei einem Zeichen wie z.B. 'Ö' nur Datenmüll rüber.
Ich würde diese Zeichen dann gerne, je nach Encoding, durch die Form '<183>' ersetzen. Dies kann auf der Gegenstelle später umgesetzt werden. Ich habe leider keine andere Möglichkeit sonst die Gegenstelle anzupassen, da es nicht mein Programm ist und ich es nicht ersetzen kann. Gibt es einen eleganteren Weg als Fix die Nummer pro Codec abzufragen?
Ich würde es in etwa so gestalten wollen:
Die Hilfen im Netz oder von Delphi selbst konnten mir keine wirkliche Hilfe dazu liefern.
Delphi-Quellcode:
function ConvertStr(
const sInput:
string):
string;
var
lTmpStr:
string;
i: integer;
lCharInt: integer;
ch: char;
begin
Result := '
';
lTmpStr := '
';
if sInput<>'
'
then
begin
for i := 1
to length(sInput)
do
begin
ch := sInput[i];
lCharInt := integer(ch);
//if ch>=TEncoding.GetEncoding(_ZielEncoding)."Maximaler Integerwert für Chars" then //<--Hier eine Maximale Gültiger Wert für eine Nummer
if ch >= #127
then //hier anstatt hard zu encoden für z.B Ascii
lTmpStr := lTmpStr + '
<' + IntToStr(z) + '
>'
else
lTmpStr := lTmpStr + ch;
end;
end;
Result := lTmpStr;
end;