Ja, ich hab ja auch geschrieben "eher schon". {$H+} hat wenigstens mit Strings zu tun.lrlr hat geschrieben: das ist doch "nur" die unterscheidung long/short string (also längenangabe in [0] oder eben "moderne" strings...)

Ja, ich hab ja auch geschrieben "eher schon". {$H+} hat wenigstens mit Strings zu tun.lrlr hat geschrieben: das ist doch "nur" die unterscheidung long/short string (also längenangabe in [0] oder eben "moderne" strings...)
Neue versionen von FPC tun auch (1). (2) ist eine reine Lazarus loessung.mschnell hat geschrieben:Bei Strings ist
- das Verhalten von neueren (Unicode-fähigen) Lazarus/FPC-Versionen (->2) sehr unterschiedlich von dem von älteren (nicht Unicode-fähigen) Delphi-Versionen. Es ist auch nicht möglich, über irgendwelche Optionen ein "altes" (nicht Unicode
Momentan also am besten keine Energie in das Erlernen der String - Operationen der aktuellen Lazarus-Version stecken.
(1) der "ANSISTRING" Typ wird als Folge von 8-Bit ANSI-Zeichen in der lokalen ANSI-Codierung (Windows-Einstellung)interpretiert
(2) der "ANSISTRING" Typ wird als UTF8-codiert behandelt, jedes dieser Zeichen kann mit 8, 16, 24 oder 32 Bit codiert sein.
(3) neuer String-Typ mit variabler Codierung mit 8, 16, oder 32 Bit Charactern in ANSI-Codierung mit einstellbarer Codepage, UTF8, UTF16, oder 32 Bit UNICODE.
AFAIK, UTF-8 ist keine ANSI-, sondern eine Unicode-Codierung. Außerdem ist UTF-8 nicht landesspezifisch (so wie ANSI-xxxx) also eben keine "lokale" Codierungmarcov hat geschrieben:Aber die lokalen Ansi Codierung(1) auf Linux kann auch UTF-8 sein.
Das ist eine Meinung, kein Fakt. Eine andere Meinung ist das das die Codierung ist von String-Arrays mit Element-große 1.mschnell hat geschrieben:AFAIK, UTF-8 ist keine ANSI-, sondern eine Unicode-Codierung. Außerdem ist UTF-8 nicht landesspezifisch (so wie ANSI-xxxx) also eben keine "lokale" Codierungmarcov hat geschrieben:Aber die lokalen Ansi Codierung(1) auf Linux kann auch UTF-8 sein.
Es ist möglich das Lazarus das Heute forciert ja.Soweit ich weiß, erzeugt Lazarus bei einem mit der IDE in den Quelltext getipperten "MYANSISTRING := '1ä2ö';" auf jeden Fall einen UTF-8 codierten String und es gibt keine Einstellung "lokale ANSI-Codierung = deutsch" in Lazarus oder im Linux- oder Windows- System, die das verhindern könnte.
Unter Windows last es sich nicht bequem Konfigurieren (vielleicht aber mit Ultimate), aber es existiert (1).Turbo-Delphi und ältere Lazarus-Versionen dagegen erzeugt in jedem Fall eine ANSI-Codierung (vermutlich entsprechend der lokale-Einstellung in Windows, keine Ahnung wie das auf Linux eingestellt wird) und niemals UTF-8.
Interessiert das den Compiler überhaupt? Wenn es sich nur um 8bit Zeichen handelt und keine $codepage gesetzt ist, nehme ich an, dass das einfach auf "default" (keine Konvertierung) läuft. Dem Compiler kann ja egal sein, was in String Konstanten und Kommentaren steht, so lange es 8 bit Zeichen sind.marcov hat geschrieben: Ich habe etwas gesucht in Lazarus und kann dort auch nicht finden wo die Codierung gesetzt wirt. Hast du ein Beispiel?
Dem Programmier ist es aber nicht egal, falls er WideString Konstanten definieren will.theo hat geschrieben:Dem Compiler kann ja egal sein, was in String Konstanten und Kommentaren steht, so lange es 8 bit Zeichen sind.
Es ging hier aber um ANSI (Latin1) vs. UTF-8, wenn ich das richtig verstehe.mse hat geschrieben: Dem Programmier ist es aber nicht egal, falls er WideString Konstanten definieren will.
Du meinst wahrscheinlich "decomposed characters".mschnell hat geschrieben:(und dann gibt es noch "Surrogate Pairs", was die Sache noch komplizierter mach
Der Verzicht auf {$codepage...} -Fc... beeinflusst leider auch WideString-Konstanten.theo hat geschrieben: Es ging hier aber um ANSI (Latin1) vs. UTF-8, wenn ich das richtig verstehe.
Nichts als Ärger mit den WideStrings...mse hat geschrieben: Der Verzicht auf {$codepage...} -Fc... beeinflusst leider auch WideString-Konstanten.
Falsch !theo hat geschrieben:Nichts als Ärger mit den WideStrings...
Der obige Beitrag war an mse gerichtet und als Scherz gemeint, wie man am LOL sehen kann.mschnell hat geschrieben: Falsch !
Richtig wäre: Nichts als Ärger mit String-Konstanten.![]()
Nur mit Lazarus und dem "utf-8 in AnsiStrings, kein -Fcutf8, kein BOM, kein {$codepage utf8}"-System; mit MSEgui und anderen FPC Werkzeugen funktioniert es wunderbar.theo hat geschrieben: Nichts als Ärger mit den WideStrings...
Pascal String Indizes sind 1-basiert.lrlr hat geschrieben:also der debugger zeigt bei a[0] das an, was eigentlich a[1] sein sollte