Ja, so geht's mit UnicodeString, abermse hat geschrieben:Vermutlich ${codepage utf8} oder -Fcutf8.theo hat geschrieben: Habe ich einen Schalter verpasst?
u16:=u8;
gibt immer noch Länge 6.
Soll das so sein und warum?
Ja, so geht's mit UnicodeString, abermse hat geschrieben:Vermutlich ${codepage utf8} oder -Fcutf8.theo hat geschrieben: Habe ich einen Schalter verpasst?
Warum? FPC 2.6.0 hat doch ausser Unicode ResourceStrings schon alles was es braucht , siehe mein Beitrag weiter oben.mschnell hat geschrieben: Es gibt mehrere Grundsatzentscheidungen zu treffen:
Alles andere ist hauptsächlich Delphi Kompatibilität. Da einige FPC Core Entwickler beruflich mit Delphi arbeiten, hat das einfach Vorrang.Für 8-Bit Speicherung von Zeichenketten und kombinierte Zeichen und binären Daten wird "AnsiString" verwendet.
Für alle reinen Zeichenketten für GUI-Zwecke wird 16bit-UnicodeString verwendet, die Codierung ist utf-16.
Die Konversion AnsiString <-> UnicodeString wird auf Basis der 8bit-Systemcodierung von Compiler und RTL automatisch durchgeführt, alle weiteren Code-Wandlungen müssen vom Programm explizit vorgenommen werden.
Ja, das soll so sein AFAIK. "Codepage aware AnsiString" liefert immer bytecount als Länge.theo hat geschrieben: Soll das so sein und warum?
Sieht so aus. Folgerichtig, aber nicht extrem intuitiv, ergibt dann folgendes auch 1mse hat geschrieben: Ja, das soll so sein AFAIK. "Codepage aware AnsiString" liefert immer bytecount als Länge.
Ja Unicode ist wirklich einfach und intuitiv.mse hat geschrieben:Ja, das soll so sein AFAIK. "Codepage aware AnsiString" liefert immer bytecount als Länge.
Vier.mschnell hat geschrieben:Ein Stringm der genau ein Alt-Ägyptisches Zeichen in UTF-16-Codierung beinhaltet kann also drei mögliche Längen haben:mse hat geschrieben:Ja, das soll so sein AFAIK. "Codepage aware AnsiString" liefert immer bytecount als Länge.
- 1 (Anzahl der sichtbaren Zeichen)
- 2 (Anzahl der Unicode-Code-Elemente
- 4 (Anzahl der Bytes)
Falls da nicht "3 Stück" rauskommt, bleibt's bei 3 verschiedenen Längenmse hat geschrieben:Vier.Du hast ... vergessen
Verstehe ich nicht.mschnell hat geschrieben: Falls da nicht "3 Stück" rauskommt, bleibt's bei 3 verschiedenen Längen![]()
![]()
![]()
Code: Alles auswählen
var u:UnicodeString;
s:String;
begin
u:='test';
s:='test';
Caption:=inttostr(StringElementSize(u));
Caption:=inttostr(StringElementSize(s));
Wahrscheinlich "not yet decided".theo hat geschrieben:Ich kapier's trotzdem nicht.
In Delphi ist der "magische" UnicodeString nun der Default String.
Bei FPC aber nicht.
Woher hast du diese Information? So viel ich weiss gilt das für Delphi nicht mehr. Es war mal die Rede davon, wurde dann aber nicht realisiert. Falls doch, ist es ja noch schlimmer...Bei Delphi: "UnicodeString kann Unicode- und ANSI-Strings enthalten."
"not yet decided".Dann gibt es aber einen neuen AnsiString der gerne auch UTF16 "frisst" aber trotzdem eine Elementgrösse von 1 hat.
Und wie laufen die automat. Konversionen nun genau?
http://docwiki.embarcadero.com/RADStudi ... RAD_Studio" onclick="window.open(this.href);return false;UnicodeString kann als die folgende Delphi-Struktur dargestellt werden:
type StrRec = record
CodePage: Word;
ElemSize: Word;
refCount: Integer;
Len: Integer;
case Integer of
1: array[0..0] of AnsiChar;
2: array[0..0] of WideChar;
end;
Das befürchte ich auch, womit ich nun wirklich jeden verstehe, der das alles nicht versteht.mse hat geschrieben:Für cpstrnew und UnicodeString wird der gleiche Record verwendet.
Eine UnicodeString Variable hat aber immer die "2: array[0..0] of WideChar;" Form. AFAIK...
1, 2 und 4 habe ich schon erwäht, weniger als 1 oder mehr als 4 kommt sicher nicht raus, bleibt die "3" als einzige weiter Variante.mse hat geschrieben:Verstehe ich nicht.mschnell hat geschrieben: Falls da nicht "3 Stück" rauskommt, bleibt's bei 3 verschiedenen Längen![]()
![]()
![]()
Ich habe zwar beides nicht, aber meine Kollegen haben mir erzählt dass sich das zwischen "Delphi 2009" und "Delphi XE 2" in diversen Aspekten geändert hat und erheblich verbessert worden ist (in welcher Hinsicht auch immer).theo hat geschrieben:Bei Delphi: "UnicodeString kann Unicode- und ANSI-Strings enthalten."