AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein UTF8 Literale leserlich machen. Welche Unit / Funktion?

UTF8 Literale leserlich machen. Welche Unit / Funktion?

Ein Thema von DieDolly · begonnen am 22. Jul 2019 · letzter Beitrag vom 25. Jul 2019
Antwort Antwort
Seite 1 von 4  1 23     Letzte » 
DieDolly

Registriert seit: 22. Jun 2018
2.173 Beiträge
 
#1

UTF8 Literale leserlich machen. Welche Unit / Funktion?

  Alt 22. Jul 2019, 16:50
Encoding von Zeichen war noch nie meine Stärke.
Gibt es in delphi eine Unit die aus \xc4\x80 den entsprechenden Buchstaben zaubert?
  Mit Zitat antworten Zitat
Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.039 Beiträge
 
Delphi XE2 Professional
 
#2

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

  Alt 22. Jul 2019, 17:22
Unit System
z.B. so:
Delphi-Quellcode:
var S:String;
begin
   S:=UTF8ToUnicodeString(#$C4#$80);
   ShowMessage(S);
end;
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat
Der schöne Günther
Online

Registriert seit: 6. Mär 2013
6.093 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

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

  Alt 22. Jul 2019, 17:23
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. 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;
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.173 Beiträge
 
#4

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

  Alt 22. Jul 2019, 17:35
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.

Geändert von DieDolly (22. Jul 2019 um 17:41 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
10.934 Beiträge
 
Delphi 12 Athens
 
#5

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

  Alt 22. Jul 2019, 17:45
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.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.173 Beiträge
 
#6

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

  Alt 22. Jul 2019, 17:47
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 \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.

Geändert von DieDolly (22. Jul 2019 um 18:09 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
10.934 Beiträge
 
Delphi 12 Athens
 
#7

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

  Alt 22. Jul 2019, 18:14
Da kann auch reinkommen \xc4\x80\x16\x16\x16Hallo
Ach so, du bekommst dies als String in dein Programm?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.173 Beiträge
 
#8

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

  Alt 22. Jul 2019, 18:17
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));

Geändert von DieDolly (22. Jul 2019 um 18:51 Uhr)
  Mit Zitat antworten Zitat
Der schöne Günther
Online

Registriert seit: 6. Mär 2013
6.093 Beiträge
 
Delphi 10 Seattle Enterprise
 
#9

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

  Alt 22. Jul 2019, 19:45
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;
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.173 Beiträge
 
#10

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

  Alt 22. Jul 2019, 19:57
ich versuche das gerade zu verstehe und zu kompilieren aber irgendwas stimmt mit dieser Zeile nicht
TRegEx.Replace(input, pattern, unescape)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 17:17 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