Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Die Delphi-IDE (https://www.delphipraxis.net/62-die-delphi-ide/)
-   -   Sonderzeichen in Lokale Variablen Fenster bei Unicode (https://www.delphipraxis.net/208000-sonderzeichen-lokale-variablen-fenster-bei-unicode.html)

colcok 26. Mai 2021 12:43

Sonderzeichen in Lokale Variablen Fenster bei Unicode
 
Es gibt beim Debuggen ein Phänomen beim Anzeigen eines Unicodezeichens (Umlaut), das ich nicht nachvollziehen kann:
Code:
wchar_t cd = L'ä';
Dargestellt wird es im C++ Builder 10.3 unter Lokale Variablen wie folgt beim Debuggen:
Code:
cd L'ä꓃' 228U (0x00E4)
Warum wird hinter dem 'ä' noch ein 'Yi Radical Che'-Zeichen (꓃ (U+A4C3)) angezeigt?
Ich weiß, dass das 'ä' aus 2 Bytes zusammengesetzt ist, aber warum diese Darstellung?
Bei den anderen Umlauten wird auch ein anderes Zeichen daneben noch angezeigt.

Das 'a' zum Beispiel wird ja auch wie folgt angezeigt:
Code:
cd L'a' 97U (0x0061)
Ist das ein Bug?

himitsu 26. Mai 2021 14:10

AW: Sonderzeichen in Lokale Variablen Fenster bei Unicode
 
228U (0x00E4) das Ä ... also 2 Byte = ein WideChar

Könnte es sein, dass hier kein abschließendes #0 enthalten ist?
Und zufällig liegen "irgendwelche" 2 Bytes gefolgt von 2 Nullen dahinter im Speicher?



'꓃' sind 8 Chars im String (HTML-Kodierung).

colcok 27. Mai 2021 07:30

AW: Sonderzeichen in Lokale Variablen Fenster bei Unicode
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich hänge am Besten nochmal einen Screenshot an, da sieht man es besser, es wird als
'ä꓃' angezeigt.
Wie auch immer, das scheint ein Bug zu sein, oder? Eine abschließende '\0' müsste
ja nicht vorhanden sein, da ich nur mit einem wchar_t arbeite, nicht mit einem String.

TurboMagic 27. Mai 2021 20:05

AW: Sonderzeichen in Lokale Variablen Fenster bei Unicode
 
Moment! Ist nicht ein wchar_t ein Zeiger auf einen null terminieren String?

himitsu 27. Mai 2021 23:25

AW: Sonderzeichen in Lokale Variablen Fenster bei Unicode
 
Jo, drum steht da auch ein L vor'm "wide-character literal"


Delphi-Strings (LongStrings) nutzen sie zwar selber nicht, aber sie haben dennoch hinten implizit zwei #0 dran, als Kompatibilität, um "einfach" nach PChar casten zu können.
In C/C++ muß man das öfters selber machen (abgesehn von z.B. dem BSTR aka WideString in Delphi),
genauso wie in Delphi, wenn man dort manuell mit PChar und CharArrays rumspielt (ohne die Automatiken zu verwenden).


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