Das wird nicht klappen. Es wird einfach zwei Bytes holen auf Offset 5*2. Das wird sich auch nicht ändern. Auch nicht mit TUnicodeString oder in Tiburon.mschnell hat geschrieben:
Übrigens: wie weist man denn das 5. Zeichen eines Unicode-Strings auf einen WideChar zu ????
c := x[5]; wäre Pascal-Typisch, aber hier müsste der Compiler Code einbauen, der das 5. Zeichen sucht (jedes Zeichen kann ja aus 1, 2, 3 oder 4 Byte bestehen).
Und siehe auch meine letzten post, wirklich perfekt mit Unicode umgehen, das es klappt mit alle sprachen is sehr,sehr Aufwändig. Man muss alle Regeln aller Sprachen auswendig kennen, und mit einfach ein array of 32-bit Zeichen wuerde man da noch nicht sein. (Denke auch an was Whitespace ist un was nicht, abbrech Regeln usw. Manche sprachen kan man nicht einfach auf eine Spalten abbrechen, weil der Ausgang von ein Wort beeinflusst wird durch das nächste Wort )
Der Loesing ist einfach: mach eine grosse Unterschied zwischen Strings nur rund pumpen (im GUI sehen lassen, nach dem Konsole ausgeben), und tatsaechlich strings editieren.
Für das Erste sind um und bei keine Kenntnisse der Sprache erforderlich. Fuer das Zweite immer.
Das zweite ist wo Widechar zum nutzen kommt. Wenn mann die Sprache wisst, zb etwas aus Europa, dan kann man schon fast alles im 16-bit machen. Im ersten Fall (nur rundpumpen) soll man aber immer (32-bit) Korrekt sein, dass ist nur eine kleine Mühe, und man kann nie wissen wie ein Projekt sich entwickelt ueber die Jahre.
--------
UTF-8 vs UTF-16
UTF-8: kein Endian Problem
UTF-16,32: Endian Problem
UTF-8: kleiner fuer die meiste Europäische Sprachen (aber nicht Cyrillisch)
fuer manche andere Sprachen (Arabisch, Cyrillisch, Hebräisch) ebenso gross wie UTF-16. ( dies wird oft vergessen, Leute glauben das UTF-16 da auch besser ist)
fuer Indische, Ost Asiatische und mehrere kleinere nicht Europäische Sprachen: UTF-16 ist besser.
UTF-32 fast immer grosser. Es gibt Strings die kleiner sind in UTF-32, aber das sind fast alle tote Sprachen.
UTF-8,UTF-16 : man muss muehe geben um von Zeichen zur Zeichen (eigentlich:Codepoint) zu gehen. Man kann das für Europäischen Sprachen fuer UTF-16 aber ignorieren.
UTF-32: man kann von Codepoint bis Codepoint gehen. Das nutzt aber fast nichts, weil Editieren schwer Sprache abhaengig ist. Und wann mann nicht Editieren kan, was nutzt ueber Zeichen iterieren?
Und fuer Europäische sprachen kann mann das schon mit UTF-16.