AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Zeichenkonvertierung TEncoding

Ein Thema von BenB · begonnen am 17. Mär 2014 · letzter Beitrag vom 17. Mär 2014
Antwort Antwort
BenB

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

Zeichenkonvertierung TEncoding

  Alt 17. Mär 2014, 00: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
samso

Registriert seit: 29. Mär 2009
439 Beiträge
 
#2

AW: Zeichenkonvertierung TEncoding

  Alt 17. Mär 2014, 07:31
Wenn ich das richtig verstehe, willst Du also auf Deiner Seite eine Umwandlung von Unicode in den 8-Bit-Code der Gegenstelle vornehmen. Die Zeichen die nicht kodiert werden konnten, sollen dabei durch eine Ersatzsequenz "<" + Code + ">" ersetzt werden.
Ich würde vorschlagen zweimal zu wandeln. Also Unicode->Zielencoding->Unicode. Jetzt kannst Du durch die alte und die neue Unicode-Zeichenkette durchgehen und bei eventuellen Unterschieden Deine Ersatzsequenz einsetzen.
  Mit Zitat antworten Zitat
BenB

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

AW: Zeichenkonvertierung TEncoding

  Alt 17. Mär 2014, 12:02
Ja genau. Es soll eine Ersatzsequenz eingesetzt werden.

Das mit der doppelten kodierung ist gut. So kriege ich die Unterschiede der nicht definierten Zeichen mit und kann diese explizit ersetzen. Das ist gut. An diese Umwandlung hatte ich gar nicht gedacht, da ich mich auf die Numerischen Werte der Chars und deren IndexRange in der Zielcodierung beschränkt habe.

Na dann setz ich mich da mal ran. Danke
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:36 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz