Unicode Mode Units-Wide

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
king558
Beiträge: 25
Registriert: So 27. Aug 2023, 16:44

Unicode Mode Units-Wide

Beitrag von king558 »

Ich habe hier ein Testprojekt, ModeSwitch habe ich es auf Unicode umgestellt. Jedoch ist die Funktion Format weiterehin Ansistring. Kann man nicht durch die ModeSwitch, alle Units auf Unicode umschalten?

Code: Alles auswählen

program ConsoleTemplate;


{$mode objfpc}{$H+}
{$ModeSwitch UnicodeStrings}


uses
  SysUtils;


var
  test : string;


begin
  test := Format( '%d', [10] );
  WriteLn( test );
  ReadLn;
end.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6216
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Unicode Mode Units-Wide

Beitrag von af0815 »

Format ist aus der RTL und die wird nicht durch eine einfache deklaration von ModeSwitch geändert. die RTL wird zusammen mit dem fpc fix erstellt und ist kein Bestandteil von Lazarus.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

king558
Beiträge: 25
Registriert: So 27. Aug 2023, 16:44

Re: Unicode Mode Units-Wide

Beitrag von king558 »

af0815 hat geschrieben:
Di 26. Sep 2023, 16:10
Format ist aus der RTL und die wird nicht durch eine einfache deklaration von ModeSwitch geändert. die RTL wird zusammen mit dem fpc fix erstellt und ist kein Bestandteil von Lazarus.
D.h. es gibt keine Unicode Version von Format Funktion? Man müsste Ansistring nach UnicodeString selbst umwandeln?

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6216
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Unicode Mode Units-Wide

Beitrag von af0815 »

wenn man mit google nach "fpc unicode" sucht findet man einige Informationen dazu.

unter andern:
FPC:
https://wiki.freepascal.org/FPC_Unicode_support

Lazarus:
https://wiki.freepascal.org/Unicode_Support_in_Lazarus
viewtopic.php?t=9354
D.h. es gibt keine Unicode Version von Format Funktion? Man müsste Ansistring nach UnicodeString selbst umwandeln?
Wenn man sich den Link zum FPC ansieht, sieht es so aus, als würde das zutreffen, das man selbst umwandeln muß.

Ich verwende generell nur UTF-8/AnsiString da der auf allen Plattformen am stabilsten in FPC/Lazarus ist. Nur wo es unbedingt notwendig ist, wandle ich gezwungener Weise um. Damit kann ich meine Programme ohne viel Änderung unter Win/Linux laufen lassen.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

PascalDragon
Beiträge: 834
Registriert: Mi 3. Jun 2020, 07:18
OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
CPU-Target: Aarch64 bis Z80 ;)
Wohnort: München

Re: Unicode Mode Units-Wide

Beitrag von PascalDragon »

king558 hat geschrieben:
Di 26. Sep 2023, 15:46
Ich habe hier ein Testprojekt, ModeSwitch habe ich es auf Unicode umgestellt. Jedoch ist die Funktion Format weiterehin Ansistring. Kann man nicht durch die ModeSwitch, alle Units auf Unicode umschalten?
Eine ModeSwitch-Direktive wirkt nur auf die aktuelle Unit, nicht auf andere (egal ob vorkompiliert oder nicht).
king558 hat geschrieben:
Di 26. Sep 2023, 18:52
af0815 hat geschrieben:
Di 26. Sep 2023, 16:10
Format ist aus der RTL und die wird nicht durch eine einfache deklaration von ModeSwitch geändert. die RTL wird zusammen mit dem fpc fix erstellt und ist kein Bestandteil von Lazarus.
D.h. es gibt keine Unicode Version von Format Funktion? Man müsste Ansistring nach UnicodeString selbst umwandeln?
Es gibt SysUtils.UnicodeFormat.

Wenn deine Ansi-CodePage auf UTF-8 eingestellt ist, ist die Konvertierung aber auch kein großer Verlust, so lange es nicht in zeitkritischen Code ist, was in den meisten Fällen eh nicht der Fall ist.

Für die vollständige Umstellung auf Unicode musst du auf das nächste Hauptrelease (3.4) warten, da es dann eine wirkliche Unicode RTL geben wird (wobei noch die Frage sein wird für welche Plattformen es welche Varianten geben wird).
FPC Compiler Entwickler

king558
Beiträge: 25
Registriert: So 27. Aug 2023, 16:44

Re: Unicode Mode Units-Wide

Beitrag von king558 »

PascalDragon hat geschrieben:
Do 28. Sep 2023, 22:42
king558 hat geschrieben:
Di 26. Sep 2023, 15:46
Ich habe hier ein Testprojekt, ModeSwitch habe ich es auf Unicode umgestellt. Jedoch ist die Funktion Format weiterehin Ansistring. Kann man nicht durch die ModeSwitch, alle Units auf Unicode umschalten?
Eine ModeSwitch-Direktive wirkt nur auf die aktuelle Unit, nicht auf andere (egal ob vorkompiliert oder nicht).
king558 hat geschrieben:
Di 26. Sep 2023, 18:52
af0815 hat geschrieben:
Di 26. Sep 2023, 16:10
Format ist aus der RTL und die wird nicht durch eine einfache deklaration von ModeSwitch geändert. die RTL wird zusammen mit dem fpc fix erstellt und ist kein Bestandteil von Lazarus.
D.h. es gibt keine Unicode Version von Format Funktion? Man müsste Ansistring nach UnicodeString selbst umwandeln?
Es gibt SysUtils.UnicodeFormat.

Wenn deine Ansi-CodePage auf UTF-8 eingestellt ist, ist die Konvertierung aber auch kein großer Verlust, so lange es nicht in zeitkritischen Code ist, was in den meisten Fällen eh nicht der Fall ist.

Für die vollständige Umstellung auf Unicode musst du auf das nächste Hauptrelease (3.4) warten, da es dann eine wirkliche Unicode RTL geben wird (wobei noch die Frage sein wird für welche Plattformen es welche Varianten geben wird).
Danke für deine Tipps und Info.

Antworten