AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi TIniFile speichert manchmal UTF8 statt ANSI
Thema durchsuchen
Ansicht
Themen-Optionen

TIniFile speichert manchmal UTF8 statt ANSI

Ein Thema von haentschman · begonnen am 11. Jun 2024 · letzter Beitrag vom 13. Jun 2024
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#1

TIniFile speichert manchmal UTF8 statt ANSI

  Alt 11. Jun 2024, 10:11
Delphi-Version: 12 Athens
Hallöle...

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

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.
* Ä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?

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"
Miniaturansicht angehängter Grafiken
1.png   2.png   3.png  

Geändert von haentschman (11. Jun 2024 um 11:42 Uhr)
  Mit Zitat antworten Zitat
Klaus01
Online

Registriert seit: 30. Nov 2005
Ort: München
5.768 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: TIni speichert manchmal UTF8 statt ANSI

  Alt 11. Jun 2024, 10:27
.. 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
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.746 Beiträge
 
Delphi 2007 Professional
 
#3

AW: TIni speichert manchmal UTF8 statt ANSI

  Alt 11. Jun 2024, 10:33
Ist vielleicht interessant: Can INI files be Unicode? Yes, they can, but it has to be your idea
Uli Gerhardt
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#4

AW: TIni speichert manchmal UTF8 statt ANSI

  Alt 11. Jun 2024, 10:51
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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (11. Jun 2024 um 10:54 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Gausi
Gausi

Registriert seit: 17. Jul 2005
880 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: TIni speichert manchmal UTF8 statt ANSI

  Alt 11. Jun 2024, 11:01
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.
The angels have the phone box.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#6

AW: TIni speichert manchmal UTF8 statt ANSI

  Alt 11. Jun 2024, 11:31
welches TIni?
Das wäre auch meine Frage. Eine Klasse TIni ist in Delphi erstmal nicht bekannt.

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.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#7

AW: TIni speichert manchmal UTF8 statt ANSI

  Alt 11. Jun 2024, 11:34
Zitat:
Ich habe auch TMemIniFile ausprobiert. Mußte ich gleich wieder zurücknehmen...
...wir reden über TIniFile.
Zitat:
gegebenenfalls die Dateibestände normalisieren.
...davor habe ich Angst. 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.

Geändert von haentschman (11. Jun 2024 um 11:41 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Gausi
Gausi

Registriert seit: 17. Jul 2005
880 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: TIniFile speichert manchmal UTF8 statt ANSI

  Alt 11. Jun 2024, 11:49
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.
The angels have the phone box.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#9

AW: TIniFile speichert manchmal UTF8 statt ANSI

  Alt 11. Jun 2024, 12:06
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.
So mache ich das auch immer, wenn sich bei mir mal ein Dateiformat ändert.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Redeemer

Registriert seit: 19. Jan 2009
Ort: Kirchlinteln (LK Verden)
1.051 Beiträge
 
Delphi 2009 Professional
 
#10

AW: TIni speichert manchmal UTF8 statt ANSI

  Alt 11. Jun 2024, 15:53
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.
Janni
2005 PE, 2009 PA, XE2 PA
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:55 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz