![]() |
Delphi2009 TMemIniFile mit UTF8 Encoding
Hallo,
ich versuche gerade mit Delphi2009 ein paar Einstellungen mittels TMemIniFile zu sichern, dabei aber die Unicode-Zeichen nicht zu verlieren. Um halbwegs kompatibel zu bleiben, wollte ich UTF8 benutzen, da "normale" Zeichen weiterhin ein Byte groß sind. Aber egal was ich anstelle, die Ini-Datei bleibt immer ANSI. Dabei benutze ich folgendes:
Delphi-Quellcode:
Aber egal, was ich bei TEncoding wähle, es hat keine Auswirkungen.
ini := TMemIniFile.Create(FileName, TEncoding.UTF8);
Kann mir da jemand helfen? Vielen Dank! |
Re: Delphi2009 TMemIniFile mit UTF8 Encoding
Das Encoding, das du beim Create übergibst, hat nur Auswirkungen, wenn die Datei nicht existiert. Ansonsten wird das bestehende Encoding der Datei verwendet (Bug or Feature?). Du kannst aber das Encoding über das gleichnamige Property vor dem UpdateFile noch gezielt setzen.
Delphi-Quellcode:
ini := TMemIniFile.Create(FileName, TEncoding.UTF8);
... ini.Encoding := TEncoding.UTF8; ini.UpdateFile; |
Re: Delphi2009 TMemIniFile mit UTF8 Encoding
Das war es! Vielen Dank.
|
Re: Delphi2009 TMemIniFile mit UTF8 Encoding
OK, ich muss nochmal nachfragen.
Eine Ini-Datei komplett UTF8-kodiert zu speichern funktioniert - jedoch hat eine andere Applikation (die ebenfalls diese Datei ausliest) ein Problem damit, da anscheinend vor der ersten Section schon irgendwelche "sonderbaren" Zeichen sind, obwohl da eigentlich nur ein "[" steht, was doch ein Zeichen ist, welches sich bei UTF8 mit einem Byte darstellen lässt. Was ich benötige, ist eigentlich auch nur ein bestimmter Value, welcher UTF8 kodiert sein soll. Wie wandle ich also einen Unicodestring (string) in UTF8 so um, dass ich diesen bei einem WriteString übergeben kann und in der Datei dann dieser String UTF8 kodiert ist? |
Re: Delphi2009 TMemIniFile mit UTF8 Encoding
Diese sonderbaren Zeichn sind die Markierung (BOM =
![]() Wenn die andere Anwendung damit Probleme hat ... kann sie denn überhaupt eine INI in diesem Format verstehen? |
Re: Delphi2009 TMemIniFile mit UTF8 Encoding
Zitat:
|
Re: Delphi2009 TMemIniFile mit UTF8 Encoding
UnicodeToUtf8
Utf8ToUnicode UTF8Encode UTF8Decode den UnicodeString in UTF8 umwandeln und dann sozusagen einfach als "ANSI" speichern ... laden dann umgekehrt [add] Zitat:
|
Re: Delphi2009 TMemIniFile mit UTF8 Encoding
OK, der Hinweis zu "BOM" ist gut!
Ansonsten ist mein Verständnis von UTF8 so, dass "normale" Zeichen (<= 127) ganz normal so bleiben - es also kein Unterschied zwischen UTF8 und Ansi gibt. Erst wenn man spezielle Zeichen wie z.B. Umlaute hat, dann werden mehr als ein Byte pro Zeichen benötigt. Eine Applikation die nichts von UTF8 versteht, wird einen solchen String verarbeiten können, lediglich die Darstellung hat sich geändert. Wenn also alles bis zur finalen Nullterminierung verarbeitet wird, so gibt es kein Problem damit. "UnicodeToUtf8 " ist deprecated und ich kann nicht compilieren. Nun, ich werde wohl mit dieser "BOM" leben müssen und das entsprechend behandeln. Vielen Dank! |
Re: Delphi2009 TMemIniFile mit UTF8 Encoding
stimmt soweit, deine verstandene Erkenntnis :-D
und wie sieht's mit UTF8Encode/UTF8Decode aus? (notfalls gibt's auch noch einige weiter Klassen und Funktionen, welche soeine Konvertierung hinbekommen ... siehe JEDI, DEC, ........) |
Re: Delphi2009 TMemIniFile mit UTF8 Encoding
Das habe ich schon probiert.
Delphi-Quellcode:
In der Datei sind Umlaute als normale Umlaute drin und eben nicht als UTF8. Ja, ich habe es mit einem Hex-Editor überprüft :)
var
ansi: AnsiString; ... ansi := UTF8Encode(Name); ini.WriteString(Section, Key, ansi); ... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:07 Uhr. |
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