Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   UTF8 Literale leserlich machen. Welche Unit / Funktion? (https://www.delphipraxis.net/201435-utf8-literale-leserlich-machen-welche-unit-funktion.html)

DieDolly 22. Jul 2019 15:50

UTF8 Literale leserlich machen. Welche Unit / Funktion?
 
Encoding von Zeichen war noch nie meine Stärke.
Gibt es in delphi eine Unit die aus \xc4\x80 den entsprechenden Buchstaben zaubert?

Amateurprofi 22. Jul 2019 16:22

AW: UTF8 Literale leserlich machen. Welche Unit / Funktion?
 
Unit System
z.B. so:
Delphi-Quellcode:
var S:String;
begin
   S:=UTF8ToUnicodeString(#$C4#$80);
   ShowMessage(S);
end;

Der schöne Günther 22. Jul 2019 16:23

AW: UTF8 Literale leserlich machen. Welche Unit / Funktion?
 
Das \x hat nichts mit Encoding zu tun, das sind programmiersprachen-eigene Maskierungen.

Du hast also 2 Bytes und willst das explizit als UTF-8 interpretieren.
Delphi-Quellcode:
TEncoding.UTF8.GetString(..)
Beispiel:

Delphi-Quellcode:
procedure TForm2.FormCreate(Sender: TObject);
const
   input: TBytes = [$c4, $80];
begin
   Caption :=
      TEncoding.UTF8.GetString(input)
      + ' / '
      + TEncoding.Unicode.GetString(input);
end;

DieDolly 22. Jul 2019 16:35

AW: UTF8 Literale leserlich machen. Welche Unit / Funktion?
 
Zitat:

Das \x hat nichts mit Encoding zu tun, das sind programmiersprachen-eigene Maskierungen.
Zitat:

S:=UTF8ToUnicodeString(#$C4#$80);
Das heißt, dass diese Maskierung in Delphi ein #$ ist?

Wie bekommt man denn einen String den man dann mit StringReplace bearbeitet hat in UTF8ToUnicodeString? Einen string mit ' umschlossen mag er nicht.

Uwe Raabe 22. Jul 2019 16:45

AW: UTF8 Literale leserlich machen. Welche Unit / Funktion?
 
Zitat:

Zitat von DieDolly (Beitrag 1437324)
Das heißt, dass diese Maskierung in Delphi ein #$ ist?

Im Klartext bedeutet diese Sequenz:

#: Dies ist ein Char, den ich aber mit seiner Ordnungszahl angebe
$: Dies ist eine Zahl in Hexadezimaldarstellung

#13 und #$C sind also identische Chars. Ebenso '0', #48 und #$30.

DieDolly 22. Jul 2019 16:47

AW: UTF8 Literale leserlich machen. Welche Unit / Funktion?
 
Das macht es noch komplizierter.
Wie bekommt man einen String wie ganz oben denn in TBytes rein oder in einen lesbaren String?
Der Input kann immer wie oben aussehen. Er kann aber auch schon in lesbarer Form vorhanden sein.

Da kann auch reinkommen
Delphi-Quellcode:
\xc4\x80\x16\x16\x16Hallo


Ich dachte an sowas hier aber da passt dieses spezielle A nicht mehr rein
Delphi-Quellcode:
var
 Bytes: TBytes;
begin
 Bytes := [Ord('Ā'), $80, Ord('S')];
 ShowMessage(TEncoding.UTF8.GetString(Bytes));
Aber ich glaube ich habe gerade eh einen Knoten im Kopf.

Uwe Raabe 22. Jul 2019 17:14

AW: UTF8 Literale leserlich machen. Welche Unit / Funktion?
 
Zitat:

Zitat von DieDolly (Beitrag 1437326)
Da kann auch reinkommen
Delphi-Quellcode:
\xc4\x80\x16\x16\x16Hallo

Ach so, du bekommst dies als String in dein Programm?

DieDolly 22. Jul 2019 17:17

AW: UTF8 Literale leserlich machen. Welche Unit / Funktion?
 
Ja richig. Das kann ein String sein der Nur aus solchen Literalen besteht, es kann ein Klartext sein oder eine Mischung.
Und ich bin mir nicht sicher, wie ich damit umgehen soll, um aus jeder dieser Varianten den Klartext zu bekommen.

Würde mich über Hilfe freuen.

Sowas hier klappt natürlich auch nicht.
Delphi-Quellcode:
 VonDatei := '\xc4\x80\xc4\x86Hallo';

 Bytes := TEncoding.UTF8.GetBytes(VonDatei);
 ShowMessage(TEncoding.UTF8.GetString(Bytes));

Der schöne Günther 22. Jul 2019 18:45

AW: UTF8 Literale leserlich machen. Welche Unit / Funktion?
 
Eine dumme Idee: Kommt man mit so etwas in der Richtung weiter?

Delphi-Quellcode:
procedure TTest.p();
const
   input = '\xc4\x80\xc4\x86Hallo';
   pattern = '\\x((\d|[a-f]*){2})';
var
   matchEvaluator: TMatchEvaluator;
begin
   WriteLn( TRegEx.Replace(input, pattern, unescape) );
end;

function TTest.unescape(const match: TMatch): String;
var
   hexNumber: String;
begin
   hexNumber := '$' + match.Groups[1].Value;
   Result := Chr( Byte.Parse(hexNumber) );
end;

DieDolly 22. Jul 2019 18:57

AW: UTF8 Literale leserlich machen. Welche Unit / Funktion?
 
ich versuche das gerade zu verstehe und zu kompilieren aber irgendwas stimmt mit dieser Zeile nicht
Delphi-Quellcode:
TRegEx.Replace(input, pattern, unescape)


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:29 Uhr.
Seite 1 von 4  1 23     Letzte »    

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