Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi string in unicode konvertieren (https://www.delphipraxis.net/9693-string-unicode-konvertieren.html)

steppo 1. Okt 2003 21:41


string in unicode konvertieren
 
Wer kann mir sagen, wie ich eine Variable vom typ string in unicode umwandeln kann?

Chewie 1. Okt 2003 21:50

Re: string in unicode konvertieren
 
Schau dir mal StringToWideString an.

steppo 1. Okt 2003 22:10

Re: string in unicode konvertieren
 
Wo finde ich diese funktion?
In der Hilfe ist nur StringToWideChar zu finden!

Chewie 1. Okt 2003 22:12

Re: string in unicode konvertieren
 
:duck:

Die meinte ich eigentlich. Sorry :?

steppo 1. Okt 2003 22:23

Re: string in unicode konvertieren
 
Sieht nett aus, aber so richtig werde ich daraus nicht schlau.

Ist die Funktion so richtig angewandt?

Function bla
var
Test,Test1:PWideChar;

begin

Test1:=StringToWideChar('Hallo',Test,length('Hallo '));

end;

Christian Seehase 1. Okt 2003 22:50

Re: string in unicode konvertieren
 
Moin Steppo,

da PWideChar nur ein Pointer ist, musst Du auch noch Speicher reservieren:

Delphi-Quellcode:
var
Test,Test1:PWideChar;

begin
  Test := AllocMem(length('hallo')*2);
  try
    Test1:=StringToWideChar('Hallo',Test,length('Hallo')*2);
  finally
    // Test1 wird hierdurch auch ungültig
    FreeMem(Test,length('hallo')*2);
  end;
end;

steppo 1. Okt 2003 22:55

Re: string in unicode konvertieren
 
danke werde es ausprobieren!
Habe mehrere Einträge die so umgewandelt werden müssen.

Melde mich dann wieder.

P.S.: Wie kann ich mir die konvertierte Variable anzeigen lassen?

Christian Seehase 1. Okt 2003 23:01

Re: string in unicode konvertieren
 
Moin Steppo,

z.b. mit ShowMessage.

Delphi-Quellcode:
ShowMessage(Test);
Wichtig hierbei:
Nach dem finally Block sind die Pointer beider Variablen wieder ungültig.

Ach so:
Du kannst es auch mit WideString machen. Dann fällt das Problem mit dem selber wieder freigeben müssen des Speichers flach.
Sollte also auch so gehen:

Delphi-Quellcode:
var
  wsTest3 : WideString;

begin
  wsTest3 := StringOfChar(#00,length('hallo')*2);
  StringToWideChar('hallo',@wsTest2[1],length('hallo')*2);
end;

jbg 2. Okt 2003 00:24

Re: string in unicode konvertieren
 
Und warum das ganze so kompliziert?

Delphi-Quellcode:
var
  A: string; // AnsiString
  W: WideString;
  PW: PWideChar;
begin
  A := 'Hallo';
  W := A; // Compiler Magic sorgt für die Konvertierung

  W := 'Hallo';
  A := W; // Compiler Magic sorgt für die Konvertierung

  PW := PWideChar(W);
end;

Chewie 2. Okt 2003 14:16

Re: string in unicode konvertieren
 
Verdammte Compiler-Magic...
Nimmt einem die ganze Arbeit ab. Das ist wohl mit der Grund, warum C-Programmierer Delphi-Programmierer nicht für voll nehmen :mrgreen:

Bernhard Geyer 3. Okt 2003 21:38

Re: string in unicode konvertieren
 
Es ist nicht umbedingt alles 100% Compiler magic

Delphi-Quellcode:
var
  A: string; // AnsiString
  W: WideString;
  PW: PWideChar;
begin
  A := 'Hallo';
  W := A; // Hier wird die API-Funktion WideCharToMultiByte mit aktueller Codepage aufgerufen

  W := 'Hallo';
  A := W; // Hier wird die API-Funktion WideCharToMultiByte mit aktueller Codepage aufgerufen

  PW := PWideChar(W);
end;
Der nachteil ist natürlich das man die Codepage nicht bestimmen kann. Z.B. ein 'ä' wird unter einem chinesischen Windows ein a.

jbg 4. Okt 2003 00:31

Re: string in unicode konvertieren
 
Zitat:

Zitat von Bernhard Geyer
Es ist nicht umbedingt alles 100% Compiler magic

Und wo bitte hast du den WideCharToMultiByte Aufruf geschrieben? Irgendwie hat das doch der Compiler für dich erledigt.

Bernhard Geyer 4. Okt 2003 10:11

Re: string in unicode konvertieren
 
Man muß sich im klaren sein das diese Compiler-Magic bei deutschen Sonderzeichen (oder allgemein allen Zeichen > $7F) nicht unbedingt ein Magic-Ergebnis liefert, da eine Codepage-Wandlung durchgeführt wird. Magic wäre es m.E. wenn auch unter einem chinesischen Windows aus einem Ansi-Ä ein Wide-Ä würde (der Compiler also immer wüsste welche Codepage er verwenden muß).

Chewie 4. Okt 2003 10:24

Re: string in unicode konvertieren
 
Na ja, das wäre dann nicht Compiler-Magic, sondern Compiler-Godlike-Magic :-D


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:27 Uhr.

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