AGB  ·  Datenschutz  ·  Impressum  







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

SysUtils.TEncoding richtig verwenden

Ein Thema von delphifan2004 · begonnen am 8. Okt 2020 · letzter Beitrag vom 9. Okt 2020
Antwort Antwort
delphifan2004

Registriert seit: 26. Nov 2004
Ort: Dresden
274 Beiträge
 
Delphi 10.3 Rio
 
#1

SysUtils.TEncoding richtig verwenden

  Alt 8. Okt 2020, 22:28
Delphi-Version: 10.3 Rio
Hallo,

ich habe im Internet von dieser Klasse erfahren und will nun mal folgendes machen:

Ich habe wie das auch im Windows API der Fall ist, eine Funktion einmal für AnsiString und einmal für WideString.

Delphi-Quellcode:
function DoSomethingWithStringA(StringA: AnsiString): <irgendein Ergebnistyp>;
begin

end;

function DoSomethingWithStringW(StringW: WideStringString): <irgendein Ergebnistyp>;
begin

end;
Nun will ich nicht den Ablauf für beide Funktionen einmal für AnsiString und einmal für WideString schreiben, sondern den AnsiString in WideString konvertieren und dann die Widestring Funktion aufrufen.

Delphi-Quellcode:
function DoSomethingWithStringA(StringA: AnsiString): <irgendein Ergebnistyp>;
begin
  //Mit TEncoding den AnsiString "SreingA" in einen Widestring konvertieren den ich hier StrConToWideStr nennen will, danach:
  DoSomethingWithStringW(StrConToWideStr); //aufrufen
end;
Das gleiche auch in die andere Richtung, falls ich den WideString an eine Funktion übergeben muss aber dann in der Funktion einen Ansistring brauche.

Delphi-Quellcode:
function DoSomethingWithStringW(StringW: WideString): <irgendein Ergebnistyp>;
begin
  //Mit TEncoding den AnsiString "SreingA" in einen AnsiString konvertieren, den ich hier StrConToAnsiStr nennen will, danach
  DoSomethingWithStringA(StrConToAnsiStr);
end;

Wie muss ich da die TEncoding Klasse anwenden. Wo gibt es da einleuchtende einfache Beispiele in Object Pascal?

Das Beispiel hier:

https://riptutorial.com/de/delphi/ex...12/kodierungen

ist mir zu kompliziert und es benutzt eine TStringList, die eine Methode SaveToFile aufweist, der ich eine TEncoding Klasse übergeben kann. Den Rest aber tut die Methode SaveToFile intern.


Dort finde ich einerseits diese Zeile:

   stringList.saveToFile('file.txt',SysUtils.TEncoding.Unicode); Hier gehe ich davon aus, dass wegen "SysUtils.TEncoding.Unicode" der String 'file.txt' in einen Unicode String konvertiert wird

   stringStream := TStringStream(hello,SysUtils.TEncoding.Unicode); Diese Typecasting Syntax ist mir völlig neu, ich gehe aber davon aus, dass hier der Strin in der Variablen "hello" in einen Unicode String verwwandelt wird.

Wie aber muss ich bei meinem Vorhaben vorgehen? Das habe ich immer noch nicht verstanden.

Wer kann mir weiter helfen?
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: SysUtils.TEncoding richtig verwenden

  Alt 8. Okt 2020, 23:57
Warum willst du dafür TEncoding verwenden? Der Compiler wandelt automatisch zwischen den Codierungen um, wirft allerdings standardmäßig eine Warnung dazu aus.

Folgendes sollte also funktionieren:
Delphi-Quellcode:
var
  A: AnsiString;
  W: WideString;
begin
  A := 'Hello';
  W := 'World';
  DoSomethingWithStringA(A);
  DoSomethingWithStringA(W);
  DoSomethingWithStringW(A);
  DoSomethingWithStringW(W);
end;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: SysUtils.TEncoding richtig verwenden

  Alt 9. Okt 2020, 00:04
Implizite Castst wurden schon gezeigt.

Alternativ kann man auch explizit Casten, wenn man die Warnung "gezielt" loswerden möchte oder wenn man es braucht, um z.B. bei überladenen Methoden eine Bestimmte auszuhählen.
$2B or not $2B
  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 20:02 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