![]() |
Unicode/WChar im BCB darstellen
Moin,
wir hatten das Thema schonmal in Delphi, jetzt wollte ich mal die BCB-IDE nach dem gleichen Prinzip beschicken So sah das in Delphi 6 aus:
Delphi-Quellcode:
Die Anzeige zeigt dann "потери тепла".
Form1.Caption := WideString(#$043F)+#$043E+#$0442+#$0435+#$0440+#$0438+#$0020+
#$0442+#$0435+#$043F+#$043B+#$0430; So geht es nicht in BCB 6:
Code:
Im Builder bekomme ich als Caption dann den gewandelten Dezimalwert von 0430h, also der Typecast wird zum Wandeln verwendet.
Form1->Caption = (WideString)(0x0430);
Sehr merkwürdig...was geht da denn wieder schief? Grüße, Messie |
Re: Unicode/WChar im BCB darstellen
Versuche doch mal ... \x<HexCode>
Nachtrag: im String kannst du ANSI-Zeichen einfach so eintippen und dann die anderen Spezial-Unicode-Zeichen wie oben. Der String sollte so aussehen, denke ich: L"Blablubb\x43F" usw. Bin aber nicht sicher, ob man noch eine 0 zwichen das x und die Zahl quetschen muß/sollte (und habe keinen Bock es hier und jetzt zu testen ... zuviel Cognac intus :mrgreen: ) |
Re: Unicode/WChar im BCB darstellen
Nichts geht da schief. # in Delphi macht den Zahlenwert zum Char und von Char zu string und von string zu WideString wird die Konversion unterstuetzt. Bei C ist der Typecast aber hart. Ich kenne mich jetzt nicht mit den C++ Typwandlungen aus, aber da sollte eine dabei sein.
|
Re: Unicode/WChar im BCB darstellen
Code:
ist aber viel cplusplusiger :mrgreen: ... und man kann es bspw. mit normalen ANSI-Zeichen mischen, wodurch man beweisen kann polyglott zu sein und das mal eben in verschiedenen Sprachen zeigt:
L"\x043F\x043E\x0442\x0435\x0440\x0438 \x0442\x0435\x043F\x043B\x0430"
Code:
(noch wach, aber wieder nüchtern :mrgreen: :mrgreen: :mrgreen: )
L"DE=Hallo/EN=Hello/RU=\x041f\x0440\x0438\x0432\x0435\x0442/PL=Cze\x015b\x0107/SV=Hej"
BTW: Hart ist der nur, weil es keinen expliziten Operator gibt, man also quasi einen C-Cast bekommt. |
Re: Unicode/WChar im BCB darstellen
Zitat:
Code:
geht, aber bei
WideString s1 = L"\x043F\x043E\x0442\x0435\x0440\x0438\x0442\x0435\x043F\x043B\x0430"
L"\x043F\x043E\x0442\x0435\x0440\x0438 \x0442\x0435\x043F\x043B\x0430";
Code:
klemmt es dann (Out of memory).
s1 = s1 + WideString("a");
Wie bekomme ich denn meine Indexbuchstaben etc. da angehängt? Und was macht das 'L' vor dem String genau? Grüße, Messie |
Re: Unicode/WChar im BCB darstellen
L vor dem String ist C Syntax fuer ein Unicode String Literal. Die String-Konstante wird von Compiler nicht als C-String-Typ sondern als Unicode-String-Typ gehandelt.
|
Re: Unicode/WChar im BCB darstellen
Zitat:
Code:
läßt kein späteres
WideString s1 = L"\x043F\x043E\x0442\x0435\x0440\x0438\x0442\x0435\x043F\x043B\x0430"
L"\x043F\x043E\x0442\x0435\x0440\x0438 \x0442\x0435\x043F\x043B\x0430" L"\x043F\x043E\x0442\x0435\x0440\x0438 \x0442\x0435\x043F\x043B\x0430";
Code:
zu (Out of Memory). Übergebe ich von hinten durch die Brust ins Auge
s1 = s1 + "hallo"; //bzw.
s1 = s1 + L"\x0641";
Code:
, kann ich diese Syntax s1 = s1 + irgendwas verwenden. Die Zuweisung läßt wiederum keinen Zeilenumbruch in der IDE zu.
s1 = (WideString(wchar_t(0x0641)))+(WideString(wchar_t(0x0442)))+(WideString(wchar_t(0x043F)))+(WideString(wchar_t(0x043B)));
Die Übergabe als Literal scheint also zur Behandlung als Literal mit einer festen Länge zu führen, während die Widestringvariante das Stringarray offen hält. Ich habe mein Problem leider mit beidem nicht lösen können: beliebig lange Widestrings in der BCB6-IDE zuweisen und als WideString behandeln zu können. Grüße, Messie |
Re: Unicode/WChar im BCB darstellen
Das ist putzig. Schonmal versucht operator+= und operator+ für WideString zu überladen?
|
Re: Unicode/WChar im BCB darstellen
Zitat:
Edit: Andersrum gedacht. Wenn man der Übergabe des Literals ein Cast voranstellt, wird die Behandlung als Stringarray umgesetzt. Dem
Code:
läßt sich dann ein
WideString s1 = (WideString)L"\x043F\x043E\x0442\x0435\x0440\x0438\x0442\x0435\x043F\x043B\x0430"
L"\x043F\x043E\x0442\x0435\x0440\x0438\x0442\x0435\x043F\x043B\x0430" L"\x043F\x043E\x0442\x0435\x0440\x0438\x0442\x0435\x043F\x043B\x0430" L"\x043F\x043E\x0442\x0435\x0440\x0438\x0442\x0435\x043F\x043B\x0430" L"\x043F\x043E\x0442\x0435\x0440\x0438\x0442\x0435\x043F\x043B\x0430" L"\x043F\x043E\x0442\x0435\x0440\x0438\x0442\x0435\x043F\x043B\x0430" L"\x043F\x043E\x0442\x0435\x0440\x0438\x0442\x0435\x043F\x043B\x0430";
Code:
hinterherschicken.
s1 += (WideString)L"\x0472"
L"\x043F\x043E\x0442\x0435\x0440\x0438\x0442\x0435\x043F\x043B\x0430"; Mir ist zwar nicht klar, warum es so läuft, es scheint es aber sauberer zu laufen. Die Versuche, der Literalvariante etwas anzuhängen wurde beim Debugging von häufig aufpoppenden CPU-Fenstern begleitet... Grüße, Messie |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:09 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