Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   SysUtils.TEncoding richtig verwenden (https://www.delphipraxis.net/205717-sysutils-tencoding-richtig-verwenden.html)

delphifan2004 8. Okt 2020 22:28

Delphi-Version: 10.3 Rio

SysUtils.TEncoding richtig verwenden
 
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:

Delphi-Quellcode:
   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

Delphi-Quellcode:
   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?

Uwe Raabe 8. Okt 2020 23:57

AW: SysUtils.TEncoding richtig verwenden
 
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;

himitsu 9. Okt 2020 00:04

AW: SysUtils.TEncoding richtig verwenden
 
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.


Alle Zeitangaben in WEZ +2. Es ist jetzt 05:19 Uhr.

Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf