Einzelnen Beitrag anzeigen

BenB

Registriert seit: 16. Mär 2014
3 Beiträge
 
#1

Zeichenkonvertierung TEncoding

  Alt 16. Mär 2014, 23:34
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;
  Mit Zitat antworten Zitat