Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi TIniFile speichert manchmal UTF8 statt ANSI (https://www.delphipraxis.net/215307-tinifile-speichert-manchmal-utf8-statt-ansi.html)

haentschman 11. Jun 2024 09:11

Delphi-Version: 12 Athens

TIniFile speichert manchmal UTF8 statt ANSI
 
Liste der Anhänge anzeigen (Anzahl: 3)
Hallöle...8-)

Vieleicht habe ich es noch nicht bemerkt und es ist schon immer so...:zwinker:

Ich habe eine TIniFile wo das letzte Layout (Name) gespeichert ist. Beim Start holt sich die Anwendung das letzte Layout und zeigt es an. Beim Beenden wird das letzte Layout über die Ini gespeichert.

Seit einiger Zeit, am Quellcode ist für das Laden/Speichern nichts geändert worden, kann die Anwendung das Layout nicht laden.

Analyse:
* Die Ini Datei ist manchmal UTF8, manchmal ANSI...wieso? Ich tippe darauf, daß der Pfad zum Layout nicht richtig umgewandelt wird und der Pfad ungültig ist. :cry:
* Ändere ich das Layout manuell, wird das Layout (mit Umlauten) nicht geladen. (Bild3)

Frage:
* Hat sich bei TIniFile von D11.2 zu D12 etwas geändert?
* Früher war TIniFile ausschließlich ANSI?
* wenn der Pfad "_Default" oder den Unterstrich enthällt wird die Datei zu UTF8. Den Unterstrich gibt aber im ANSI? (#95)

Könnte mir das mal jemand erklären? :wink:

Danke...

PS:
Ich habe auch TMemIniFile ausprobiert. Mußte ich gleich wieder zurücknehmen... Fehler auf verschiedenen Systemen (nicht alle): "Keine Zuordnung für Unicode-Zeichen in der Multibyte-Zielcodeseite vorhanden"

Klaus01 11. Jun 2024 09:27

AW: TIni speichert manchmal UTF8 statt ANSI
 
.. auch ersten Bild sind im Pfad "_" vorhanden (_Layout) - das ini ist da aber weiterhin im ANSI Format.
Ob es an den "_" liegt wage ich daher zu bezweifeln.

Grüße
Klaus

uligerhardt 11. Jun 2024 09:33

AW: TIni speichert manchmal UTF8 statt ANSI
 
Ist vielleicht interessant: Can INI files be Unicode? Yes, they can, but it has to be your idea

himitsu 11. Jun 2024 09:51

AW: TIni speichert manchmal UTF8 statt ANSI
 
welches TIni?
TMemIniFile, TIniFile, ...

Wo? (Windows)

Und ist es wirklich UTF-8?
Es soll UTF-8 ohne BOM sein und im Bereich von ASCII (#0-#127) sind ANSI und UTF-8 identisch.


TIniFile definitiv nicht, denn die WinAPI kann ausschließlich ANSI und UTF-16 (Unicode).
Aber eine "Erkennung" könnte es ohne BOM teilweise für UTF-8 halten, obwohl es ANSI ist, z.B. wenn keine Umlaute (Ä) drin vorkommen.

Gausi 11. Jun 2024 10:01

AW: TIni speichert manchmal UTF8 statt ANSI
 
Wird die Datei wirklich zu UTF bzw. Ansi oder umgekehrt, oder sagt nur die Heuristik von Notepad++, dass das so sei? Sieht man in einem HexEditor ein BOM, oder fängt das direkt mit den Textdaten an?

TIniFile basiert meines Wissens nach immer noch auf der Windows-API, die nur ANSI kann, was dann zu Problemen mit Umlauten führen kann. TMemIniFile ist eine eigene Delphi-Implementierung, die auf TStringList basiert, und die dann entsprechend verschiedene Kodierungen kann.
Dein Fehler bei der Umstellung auf TMemInifile dürfte auch auf den Umlaut zurückzuführen sein. Wenn der als ANSI codiert ist (also ein Byte), aber TMemInifile versucht, die Datei als UTF-8 zu interpretieren (da bräuchte ein "ä" zwei Byte), geht das halt schief. Abhilfe: Bein Create (oder beim Lesen?) explizit die Text-Kodierung angeben, und nciht auf den Standard (iirc UTF-8) vertrauen.

Uwe Raabe 11. Jun 2024 10:31

AW: TIni speichert manchmal UTF8 statt ANSI
 
Zitat:

Zitat von himitsu (Beitrag 1537621)
welches TIni?

Das wäre auch meine Frage. Eine Klasse TIni ist in Delphi erstmal nicht bekannt.

Zitat:

Zitat von haentschman (Beitrag 1537618)
Ich habe auch TMemIniFile ausprobiert. Mußte ich gleich wieder zurücknehmen... Fehler auf verschiedenen Systemen (nicht alle): "Keine Zuordnung für Unicode-Zeichen in der Multibyte-Zielcodeseite vorhanden"

Eigentlich ist TMemInifile die perfekte Wahl, wenn man es denn auch mit einem dedizierten UTF8-Encoding erzeugt. Das kann aber halt auch bedeuten, dass eventuell existierende Dateien erst einmal konvertiert werden müssen.

Das gemeine ist halt, dass das Default-Encoding unter Windows ANSI ist, sonst aber UTF8. Deswegen würde ich sowas immer explizit festlegen und gegebenenfalls die Dateibestände normalisieren.

haentschman 11. Jun 2024 10:34

AW: TIni speichert manchmal UTF8 statt ANSI
 
Zitat:

Ich habe auch TMemIniFile ausprobiert. Mußte ich gleich wieder zurücknehmen...
...wir reden über TIniFile. :zwinker:
Zitat:

gegebenenfalls die Dateibestände normalisieren.
...davor habe ich Angst. :roll: Es sind verschiede Versionen unterwegs. Wann machen die das Update? Wenn sie wollen. Die alte Version "überspeichert" die manuell in UTF8 mit BOM geänderte Datei. :?

Gausi 11. Jun 2024 10:49

AW: TIniFile speichert manchmal UTF8 statt ANSI
 
Für das (nicht abwärtskompatible) Update: Benutze in der neuen Version einen anderen Dateinamen für die Ini. Wenn beim Laden die neue Datei da ist, wird diese mit der neuen Lade-Routine geladen. Ansonsten Fallback auf die alte Methode mit der alten Datei.
Beim Speichern ggf. die alte Datei löschen.

DeddyH 11. Jun 2024 11:06

AW: TIniFile speichert manchmal UTF8 statt ANSI
 
Zitat:

Zitat von Gausi (Beitrag 1537627)
Für das (nicht abwärtskompatible) Update: Benutze in der neuen Version einen anderen Dateinamen für die Ini. Wenn beim Laden die neue Datei da ist, wird diese mit der neuen Lade-Routine geladen. Ansonsten Fallback auf die alte Methode mit der alten Datei.
Beim Speichern ggf. die alte Datei löschen.

:thumb: So mache ich das auch immer, wenn sich bei mir mal ein Dateiformat ändert.

Redeemer 11. Jun 2024 14:53

AW: TIni speichert manchmal UTF8 statt ANSI
 
Zitat:

Zitat von himitsu (Beitrag 1537621)
Und ist es wirklich UTF-8?
Es soll UTF-8 ohne BOM sein und im Bereich von ASCII (#0-#127) sind ANSI und UTF-8 identisch.


TIniFile definitiv nicht, denn die WinAPI kann ausschließlich ANSI und UTF-16 (Unicode).

Das hier möchte ich nochmal betonen. Denn das ist meiner Meinung nach wichtig.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:07 Uhr.
Seite 1 von 2  1 2      

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