Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Stringbearbeitung - UTF8-Zeichensatz (https://www.delphipraxis.net/180357-stringbearbeitung-utf8-zeichensatz.html)

Sir Rufo 14. Mai 2014 13:37

AW: Stringbearbeitung - UTF8-Zeichensatz
 
Zitat:

Zitat von Konstantin H. (Beitrag 1258885)
Zitat:

Zitat von Sir Rufo (Beitrag 1258882)
Mit
Delphi-Quellcode:
StrToInt( '$FF' )
bekommt man
Delphi-Quellcode:
255
(in Hex
Delphi-Quellcode:
$FF
) als Integer zurück.

Hilft dir das weiter ;)

Leider nicht, es sind hauptsächlich Buchstaben und HEX-String muss zuerst zerteilt werden. FFFF und FF FF sind unterschiedliche werte ;)

Warum ich wohl extra nur ein 2-Zeichen String als Beispiel gewählt habe (siehe Beispiel von DeddyH) ;)

p80286 14. Mai 2014 14:07

AW: Stringbearbeitung - UTF8-Zeichensatz
 
Wenn ich das mal zusammen fassen darf:
Du hast einen String in dem nur die Zeichen 0..9,A..F auftreten.
Sie sind eine hexadezimale Darstellung von Zeichen in UTF8-Codierung. (C39F='ß')
die Nutzdaten sind von bestimmten Zeichenfolgen begrenzt.
die Nutzdaten sollen im Klartext dargestellt werden / die nutzdaten sollen schön dargestellt werden.

Ist das soweit richtig?

Gruß
K-H

Konstantin H. 14. Mai 2014 14:10

AW: Stringbearbeitung - UTF8-Zeichensatz
 
Also ich habe das problem der Zerteilung in HEX-Zahlen ziemlich brutal gelöst.

Delphi-Quellcode:
 
  stelle := Copy(gesamt_text,73,52);
  stelle_HEX := '';
  z := 52;
  i := 1;
  while i <= 26 do
   begin
    stelle_HEX := stelle_HEX + Copy(stelle, 1, 2) + ' ';
    z := z - 2;
    stelle := Copy(stelle, 3, z);
    i := i + 1;
   end;
Ich muss leider zugeben, dass ich eine ziemliche Niete bin, was komplexere Funktionen angeht. Darum versuche ich mich auf etwas einfachere funktionen zu beschränken.

@himitsu
Da ich nur mit Zahlen und Buchstaben(auch leerzeichen) arbeite, kommt es nicht zu solchen Kollisionen :thumb:

@DeddyH
Ich versuche jetzt erstma deinen Code zu verstehen :oops:

Konstantin H. 14. Mai 2014 14:14

AW: Stringbearbeitung - UTF8-Zeichensatz
 
Zitat:

Zitat von p80286 (Beitrag 1258894)
Wenn ich das mal zusammen fassen darf:
Du hast einen String in dem nur die Zeichen 0..9,A..F auftreten.
Sie sind eine hexadezimale Darstellung von Zeichen in UTF8-Codierung. (C39F='ß')
die Nutzdaten sind von bestimmten Zeichenfolgen begrenzt.
die Nutzdaten sollen im Klartext dargestellt werden / die nutzdaten sollen schön dargestellt werden.

Ist das soweit richtig?

Gruß
K-H

Ja. Soweit korrekt, außer es wird statt ß "SS" geschrieben und ein Leerzeichen verwendet. Schönheit ist erstmal nebensächlich. Die Buchstaben sind hauptsächlich uppercase.

himitsu 14. Mai 2014 14:22

AW: Stringbearbeitung - UTF8-Zeichensatz
 
Delphi-Quellcode:
var S: UTF8String;

SetLength(S, Length(gesamt_text) div 2)
HexToBin(PChar(gesamt_text), PAnsiChar(S), Length(S));
ShowMessage(Trim(S)); // ShowMessage(Trim(UTF8ToString(S))); falls noch keine funktionierende automatische String-Konvertierung existiert

Konstantin H. 14. Mai 2014 16:24

AW: Stringbearbeitung - UTF8-Zeichensatz
 
@himitsu
wenn ich richtig verstehe, macht dein code folgendes:
1. Die Länge des UTF8-Strings wird auf Hälfte des Ursprungstexts festgelegt
2. Mit HexToBin konvertierst du die hex-zahlen, die du durch die beiden pointer festlegst
3. Mit Trim werden der Anfang und das Ende "gesäubert" und mit showmessage ausgegeben

Das ist leider nicht nützlich für mich, da ich die nicht benötigten Hex-zahlen ausfiltern muss. Und die eigentliche Konvertierung habe ich bereits realisiert.

Zerteilung des strings:
Delphi-Quellcode:
 
  stelle := Copy(gesamt_text,73,52);
  stelle_HEX := '';
  z := length(stelle);
  while z > 0 do
   begin
    stelle_HEX := stelle_HEX + Copy(stelle, 1, 2) + ' ';
    z := z - 2;
    stelle := Copy(stelle, 3, z);
   end;
Konvertierung von Hex zu String
Delphi-Quellcode:
function HexStrToStr(s: string) : string;
var
  s2 : string;
begin
  Result := '';
  while s <> '' do
  begin
    if Pos(' ', s) <> 0 then
    begin
      s2 := Copy(s, 1, Pos(' ', s)-1);
      s := Copy(s, Length(s2)+2, MaxInt);
    end
    else
    begin
      s2 := s;
      s := '';
    end;

    Result := Result + Chr(StrToInt('$' + s2));
  end;
end;
Ich suche erstmal nach der Lösung weiter.

Konstantin H. 22. Mai 2014 14:23

AW: Stringbearbeitung - UTF8-Zeichensatz
 
Also letztendlich habe ich alles beendet. Funktioniert auch alles. :coder:


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:01 Uhr.
Seite 2 von 2     12   

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