AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Ausgabe eines UTF8-Strings in UTF8-Darstellung
Thema durchsuchen
Ansicht
Themen-Optionen

Ausgabe eines UTF8-Strings in UTF8-Darstellung

Ein Thema von Bernhard Geyer · begonnen am 26. Nov 2012 · letzter Beitrag vom 26. Nov 2012
Antwort Antwort
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.197 Beiträge
 
Delphi 10.4 Sydney
 
#1

Ausgabe eines UTF8-Strings in UTF8-Darstellung

  Alt 26. Nov 2012, 17:10
Wie kann ich einen UTF8-String auch als solchen Ausgaben.

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

Mit ungeänderten Code kommt nur äöü raus
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#2

AW: Ausgabe eines UTF8-Strings in UTF8-Darstellung

  Alt 26. Nov 2012, 17:26
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
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)

Geändert von Bummi (26. Nov 2012 um 17:30 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Ausgabe eines UTF8-Strings in UTF8-Darstellung

  Alt 26. Nov 2012, 17:40
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
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (26. Nov 2012 um 17:47 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#4

AW: Ausgabe eines UTF8-Strings in UTF8-Darstellung

  Alt 26. Nov 2012, 17:57
@himitsu

mit

SetCodePage(R, $0000, False); tut es wie gewünscht ...
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.197 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Ausgabe eines UTF8-Strings in UTF8-Darstellung

  Alt 26. Nov 2012, 18:02
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
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Ausgabe eines UTF8-Strings in UTF8-Darstellung

  Alt 26. Nov 2012, 18:23
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)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (26. Nov 2012 um 18:26 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.197 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Ausgabe eines UTF8-Strings in UTF8-Darstellung

  Alt 26. Nov 2012, 18:37
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 ...
Windows Vista - Eine neue Erfahrung in Fehlern.
  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 00:11 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