Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Ausgabe eines UTF8-Strings in UTF8-Darstellung (https://www.delphipraxis.net/171811-ausgabe-eines-utf8-strings-utf8-darstellung.html)

Bernhard Geyer 26. Nov 2012 16:10

Ausgabe eines UTF8-Strings in UTF8-Darstellung
 
Wie kann ich einen UTF8-String auch als solchen Ausgaben.

Sprich: äöü soll als äöü ausgegeben werden.

Mit ungeänderten Code kommt nur äöü raus :-(

Bummi 26. Nov 2012 16:26

AW: Ausgabe eines UTF8-Strings in UTF8-Darstellung
 
sowas?

Delphi-Quellcode:
var
 Usr:UTF8String;
 Asr:AnsiString;
begin
  Usr := 'äöü';

  Setlength(Asr,Length(Usr));
  Move(Usr[1],Asr[1],Length(Usr));
  Showmessage(asr);
end;



齅äöü >> Length(Usr)=9

齅äöü1234567890 >> Length(Usr)=19

himitsu 26. Nov 2012 16:40

AW: Ausgabe eines UTF8-Strings in UTF8-Darstellung
 
Delphi-Quellcode:
var
  U: UTF8String;
  R: RawByteString;
  S: string;

U := 'irgendwas mit ä'; // Delphi konvertiert das alleine, da bei diesem "AnsiString"-Typen die CodePage auf UTF-8 steht
R := U;
SetCodePage(R, $FFFF, False); // R hat die CodePage kopiert bekommen, daher explizit auf RAW umstellen
S := R; // *1
ShowMessage(S);

// kurz
R := UTF8Encode('irgendwas mit ä');
SetCodePage(R, $FFFF, False); // R hat die CodePage kopiert bekommen, daher explizit auf RAW umstellen
ShowMessage(R); // *1
1) R muß auf RAW stehen, da Delphi sonst denkt es sei was Anderes und würde es dann nach Unicode umwandeln.
Bei UTF-8 wäre nun alles umsonst gewesen und bei ANSI würde er die UTF-8-Zeichen im String schrotten, da er alles zwischen #128 und #255 nach Unicode konvertieren würde, entsprechend der ANSI-CodePage.

Oder du nutzt TEncoding für die Umwandlung.


[info]
ich hoffe der nicht ausprobierte Code funktioniert so wie gedacht :stupid:

Bummi 26. Nov 2012 16:57

AW: Ausgabe eines UTF8-Strings in UTF8-Darstellung
 
@himitsu

mit

Delphi-Quellcode:
SetCodePage(R, $0000, False);
tut es wie gewünscht ...

Bernhard Geyer 26. Nov 2012 17:02

AW: Ausgabe eines UTF8-Strings in UTF8-Darstellung
 
Danke mit 0 statt $FFFF hat es geklappt. SetCodePage werde ich mir wohl gut merken müssen :-)
Damit ist mein kleines UTF8/Unicode-Hilfstool auch nach XE2 portiert :-)

himitsu 26. Nov 2012 17:23

AW: Ausgabe eines UTF8-Strings in UTF8-Darstellung
 
Bei CodePage 0 (CP_ACP) mußt du aufpassen, da dort die StandardCodePage des Systems Prozesses verwendet wird.
Je nach ACP kommt da eventuell ein anderer Unicode-Text raus.

RAW ist quasi eine 1-zu-1-CodePage:
ANSI(x) = Unicode(x)

Du kannst natürlich auch direkt eine bestimmte CodePage beim SetCodePage angeben. (MSDN-Library durchsuchenMultiByteToWideChar)

Bernhard Geyer 26. Nov 2012 17:37

AW: Ausgabe eines UTF8-Strings in UTF8-Darstellung
 
Zitat:

Zitat von himitsu (Beitrag 1193073)
Bei CodePage 0 (CP_ACP) mußt du aufpassen, da dort die StandardCodePage des Systems Prozesses verwendet wird.
Je nach ACP kommt da eventuell ein anderer Unicode-Text raus.

RAW ist quasi eine 1-zu-1-CodePage:
ANSI(x) = Unicode(x)

Du kannst natürlich auch direkt eine bestimmte CodePage beim SetCodePage angeben. (MSDN-Library durchsuchenMultiByteToWideChar)

Danke. Dann muss ich für die Produkiv-Apps noch etwas rumspielen damit ...


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:52 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