AGB  ·  Datenschutz  ·  Impressum  







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

Stringbearbeitung - UTF8-Zeichensatz

Ein Thema von Konstantin H. · begonnen am 14. Mai 2014 · letzter Beitrag vom 22. Mai 2014
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Konstantin H.
Konstantin H.

Registriert seit: 3. Nov 2008
Ort: Schwedt/Oder
27 Beiträge
 
Delphi 2006 Professional
 
#1

Stringbearbeitung - UTF8-Zeichensatz

  Alt 14. Mai 2014, 13:36
Hallo DP,

ich habe folgende Probleme.

1. Ein String(ohne Leerzeichen und Zeilenumbrüche) beteht aus Ziffern und Buchstaben, die teilweise HEX-Zahlen darstellen. Es ist bekannt an welcher Position die richtige Inforamtion abgelegt ist und mittels copy(string, 10,10) werden die einzelnen stringteile rauskopiert und in die string-Variablen abgelegt. Danach muss dieser String in HEX-Zahlen unterteilt werden(die HEX-Zahlen sind jeweils zweistellig) und der entstandene HEX-String mit UTF-8-Zeichensatz umgewandelt werden. Die länge des HEX-strings ist immer bekannt.

z.B:
string-variable: 48415553
string in 2-stellige HEX-Zahlen umgestellt: 48 41 55 53
string decodiert: HAUS

Zur dekodierung habe ich die funktion von Lemmy1 aus diesem Thread verwendet, und die funktioniert. Ich muss den String in zweistellige HEX-Zahlen unterteilen.

folgendes funktioniert nicht, E2010 (string and procedure, untyped pointer or untyped parameter)und E2081(assignment FOR-Loop variable 'i')

Delphi-Quellcode:
stelle := Copy(gesamt_text,24,30);
for i:= 2 to 8 do
 begin
  stelle := Insert(' ', stelle, i);
  i := i+3;
 end;

2. Es ist bekannt, dass im string, der zB. 120 Zeichen lang ist, Information befindet. Diese ist von Nullen umgeben, die muss man löschen. Das ist kein Problem, jedoch befinden sich da die HEX-Zahlen, wie zB 31 00 11, die nicht benötigt werden. Die stehen vor der eigentlicher Information.

zB: z.B:
string-variable: 00000011ED484155530000
string in 2-stellige HEX-Zahlen umgestellt: 48 41 55 53
string decodiert: HAUS

Könnt ihr mir vllt weiterhelfen?

MfG Konstantin

Geändert von Konstantin H. (14. Mai 2014 um 13:49 Uhr) Grund: Grammatik
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#2

AW: Stringbearbeitung - UTF8-Zeichensatz

  Alt 14. Mai 2014, 13:43
Delphi-Referenz durchsuchenInsert

Tipp: Schau mal auf den nicht vorhandenen Result-Typ.


Und das "i := i+3;" : Man darf in einer For-Schleife die Schleifenvariable nicht verändern.
Entweder du rechnest das überall direkt hoch (for i := 0 to 3 do Irgendwas(i*3); ), oder du mußt das z.B. als While-Schleife lösen.
$2B or not $2B

Geändert von himitsu (14. Mai 2014 um 13:46 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#3

AW: Stringbearbeitung - UTF8-Zeichensatz

  Alt 14. Mai 2014, 13:46
Stelle := {System.}Insert(...) kann nicht funktionieren, da Insert eine Prozedur ist. Zum Rest: , was ist eigentlich das Problem? Du hast einen String, der vorne und hinten aus "0" besteht und in dem sich zwischen diesen Informationen befinden, die Du benötigst, soweit richtig? Filtert man die führenden und abschließenden "0" weg, enthält der resultierende String immer noch irrelevante Stellen, auch richtig? Und diese willst Du nun auch beseitigen und den verbleibenden String codieren, stimmt' s?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Konstantin H.
Konstantin H.

Registriert seit: 3. Nov 2008
Ort: Schwedt/Oder
27 Beiträge
 
Delphi 2006 Professional
 
#4

AW: Stringbearbeitung - UTF8-Zeichensatz

  Alt 14. Mai 2014, 14:02
@himitsu
Danke, mit while geht es genauso gut. Ich werde wohl diese Schleifenart nehmen.

Das Problem der Aufteilung des strings in HEX-Zahlen besteht aber noch. Ich verstehe nicht ganz, was der Result liefern soll...

@DeddyH
Ja, genau das möchte ich.
Mit StringReplace(stelle, '00','',[rfReplaceAll]); beseitige ich die Nullen. Ich brauche nur die HEX, die Buchstaben, Zahlen und Leerzeichen darstellen aus dieser Tabelle, d.h. der Rest kann beseiting werden. Ich komme aber nich auf eine elegante Lösung.

Geändert von Konstantin H. (14. Mai 2014 um 14:13 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: Stringbearbeitung - UTF8-Zeichensatz

  Alt 14. Mai 2014, 14:09
Mit StrToInt( '$FF' ) bekommt man 255 (in Hex $FF ) als Integer zurück.

Hilft dir das weiter
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#6

AW: Stringbearbeitung - UTF8-Zeichensatz

  Alt 14. Mai 2014, 14:21
Zitat:
StringReplace(stelle, '00','',[rfReplaceAll]);
F00F = FF


StrToInt geht ja nur bis maximal 8 Byte am Stück (Int64) ... für mehr muß man es zerlegen oder man verwendet z.B. HexToBin. (IntToHex/Format / BinToHex)
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von Konstantin H.
Konstantin H.

Registriert seit: 3. Nov 2008
Ort: Schwedt/Oder
27 Beiträge
 
Delphi 2006 Professional
 
#7

AW: Stringbearbeitung - UTF8-Zeichensatz

  Alt 14. Mai 2014, 14:24
Mit StrToInt( '$FF' ) bekommt man 255 (in Hex $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
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#8

AW: Stringbearbeitung - UTF8-Zeichensatz

  Alt 14. Mai 2014, 14:24
Nicht unbedingt die performanteste Lösung, als Ansatz soll es aber erst einmal reichen:
Delphi-Quellcode:
function Irgendwas(const s: string): string;
var
  i, iCharCode: integer;
  CharPair: string;
begin
  Result := '';
  i := 1;
  while i < Length(s) - 1 do
    begin
      CharPair := Copy(s, i, 2);
      if TryStrToInt('$' + CharPair, iCharCode) then
        if (iCharCode >= Ord('A')) and (iCharCode <= Ord('Z')) then
          Result := Result + Chr(iCharCode);
      inc(i, 2);
    end;
end;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Konstantin H.
Konstantin H.

Registriert seit: 3. Nov 2008
Ort: Schwedt/Oder
27 Beiträge
 
Delphi 2006 Professional
 
#9

AW: Stringbearbeitung - UTF8-Zeichensatz

  Alt 14. Mai 2014, 14:27
Zitat:
StringReplace(stelle, '00','',[rfReplaceAll]);
F00F = FF


StrToInt geht ja nur bis maximal 8 Byte am Stück (Int64) ... für mehr muß man es zerlegen oder man verwendet z.B. HexToBin. (IntToHex/Format / BinToHex)
Ich arbeit mit dem Zeichensatz aus dieser Tabelle, da sind solche Kreuzungen nicht wirklich möglich
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#10

AW: Stringbearbeitung - UTF8-Zeichensatz

  Alt 14. Mai 2014, 14:35
Mit HexToBin in einen UTF8String kopieren.

Oder in ein TBytes und dann via TEncoding in den Unicode-String. (ab Delphi 2009)



Aber warum eigentlich UTF8, wenn dort sowieso nur Latin1 (ISO 8859-1) drin steckt?



Ich arbeit mit dem Zeichensatz aus dieser Tabelle, da sind solche Kreuzungen nicht wirklich möglich

Code:
...0
0...

...300D0A30...
wird zu
Delphi-Quellcode:
...3D0A30...

...=
0...
$2B or not $2B

Geändert von himitsu (14. Mai 2014 um 14:39 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      

 

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 15:01 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