AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Delphi2009 TMemIniFile mit UTF8 Encoding

Ein Thema von Phoner · begonnen am 19. Dez 2008 · letzter Beitrag vom 19. Dez 2008
Antwort Antwort
Phoner

Registriert seit: 8. Okt 2008
23 Beiträge
 
#1

Delphi2009 TMemIniFile mit UTF8 Encoding

  Alt 19. Dez 2008, 10:06
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:
ini := TMemIniFile.Create(FileName, TEncoding.UTF8); Aber egal, was ich bei TEncoding wähle, es hat keine Auswirkungen.

Kann mir da jemand helfen?
Vielen Dank!
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

Re: Delphi2009 TMemIniFile mit UTF8 Encoding

  Alt 19. Dez 2008, 10:39
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;
Uwe Raabe
  Mit Zitat antworten Zitat
Phoner

Registriert seit: 8. Okt 2008
23 Beiträge
 
#3

Re: Delphi2009 TMemIniFile mit UTF8 Encoding

  Alt 19. Dez 2008, 11:20
Das war es! Vielen Dank.
  Mit Zitat antworten Zitat
Phoner

Registriert seit: 8. Okt 2008
23 Beiträge
 
#4

Re: Delphi2009 TMemIniFile mit UTF8 Encoding

  Alt 19. Dez 2008, 13:47
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?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Delphi2009 TMemIniFile mit UTF8 Encoding

  Alt 19. Dez 2008, 13:54
Diese sonderbaren Zeichn sind die Markierung (BOM = Byte Order Mark) dafür, daß die folgenden Daten UTF8 darstellen sollen

Wenn die andere Anwendung damit Probleme hat ... kann sie denn überhaupt eine INI in diesem Format verstehen?
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.195 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: Delphi2009 TMemIniFile mit UTF8 Encoding

  Alt 19. Dez 2008, 13:57
Zitat von himitsu:
kann sie denn überhaupt eine INI in diesem Format verstehen?
Das offizielle MS-Iniformat kann nur ANSI. Es gibt zwar Win32-API-Funktionen die ein W im Namen haben, diese schreiben aber auch nur ANSI-Inidateien.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Delphi2009 TMemIniFile mit UTF8 Encoding

  Alt 19. Dez 2008, 13:58
UnicodeToUtf8
Utf8ToUnicode
UTF8Encode
UTF8Decode

den UnicodeString in UTF8 umwandeln und dann sozusagen einfach als "ANSI" speichern ... laden dann umgekehrt


[add]
Zitat von Bernhard Geyer:
Das offizielle MS-Iniformat kann nur ANSI. Es gibt zwar Win32-API-Funktionen die ein W im Namen haben, diese schreiben aber auch nur ANSI-Inidateien.
dann sind diese Funktionen wohl nur für Unicode-Dateinamen, aber nicht für den Inhalt
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Phoner

Registriert seit: 8. Okt 2008
23 Beiträge
 
#8

Re: Delphi2009 TMemIniFile mit UTF8 Encoding

  Alt 19. Dez 2008, 14:07
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!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Delphi2009 TMemIniFile mit UTF8 Encoding

  Alt 19. Dez 2008, 14:32
stimmt soweit, deine verstandene Erkenntnis

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, ........)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Phoner

Registriert seit: 8. Okt 2008
23 Beiträge
 
#10

Re: Delphi2009 TMemIniFile mit UTF8 Encoding

  Alt 19. Dez 2008, 14:57
Das habe ich schon probiert.
Delphi-Quellcode:
var
  ansi: AnsiString;
...
  ansi := UTF8Encode(Name);
  ini.WriteString(Section, Key, ansi);
...
In der Datei sind Umlaute als normale Umlaute drin und eben nicht als UTF8. Ja, ich habe es mit einem Hex-Editor überprüft
  Mit Zitat antworten Zitat
Antwort Antwort


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 08:06 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