ich verwende die Version 1.4.4 (FPC 2.6.4) u.A. unter Windows. Hier versuche ich Sections aus einer INI-Datei auszulesen, die umlaute beinhalten. Also z.B.
Der Eintrag lautet z.B. Pos=34
Es kommt aber 0 zurück, da vermutlich die Section mit dem Umlaut nicht erkannt wird. Ich habe auch schon folgenden Aufruf versucht:
Windows kann immer bedeuten: Widestrings. Daher versuch's mal mit UTF8Encode bzw UTF8Decode (ich weiß nie, welches von beiden von Wide nach UTF8 umwandelt und welches umgekehrt...).
procedure TForm1.Button1Click(Sender: TObject);
var
ini: TIniFile;
begin
ini := TIniFile.Create('test.ini');
ini.WriteString('äää', 'öäü', Edit1.Caption);
ini.Free;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
ini: TIniFile;
begin
ini := TIniFile.Create('test.ini');
Edit1.Caption:=ini.ReadString('äää', 'öäü', 'default');
ini.Free;
end;
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
...ich lese zu Begin alle Sections mit "ReadSections" in eine "TStringList" ein.
Aber schon hier stehen Sonderzeichen, die ich allerdings mit "UTF8Decode" umwandeln kann. Aber die Abfrage mit "INIFile.ReadInteger(UTF8Decode(sTemp1), 'Pos', 0); " funktioniert einfach nicht.
Ich muss allerdings dabei sagen, dass ich diese INI-Datei mit dem normalen editor unter Windows erstellt habe, und nicht über das Programm.
Erstelle ich die INI-Datei unter linux (mit gedit) wird die 1-te Section unter windows überhaupt nicht gelesen, sie wird einfach übersprungen als wäre sie nicht da; aber das ist ein anderes Problem...
keine Chance, es scheint ein wahrloses Durcheinander zu sein....es klappt mit keiner der genannten Einstellungen...egal, überleg ich mir etwas anderes...
Fange ich mal vorne an. Ich lese alle Sections mit "INITest.ReadSections(sSections);" ein. (sSections ist eine TStringList) Das erste grundsätzliche Problem: die erste Section wird nicht erkannt, also nicht eingelesen...egal was dort steht...und dann bin ich noch nicht bei den Umlauten..
Udo
Ups. der Anhang ist nicht vorhanden, also der Inhalt:
Nein, sowas könnte ich mir ja selber machen. Ich brauche schon die Datei konkret, die dir Probleme macht. Falls die Forumsoftware keine ini-Dateien akzeptiert, packe sie in ein zip.
Wenn du die Datei in Notepad++ lädst, siehst du rechts unten, dass es sich um eine UTF8-Codierung mit BOM handelt (BOM = Byte-Order-marker). Am einfachsten berücksichtigst du das, wenn du zum Erzeugen der Ini-Datei nicht die Methode mit dem Dateinamen, sondern die mit einem Stream nimmst; damit kannst du alles bis zur ersten öffnenden Klammer überlesen und den Rest direkt an die TIniFile übergeben:
ich habe auf 1.6 / 3.0 gewechselt und es scheint alles sauber zu funktionieren, selbst das umbenenne von Dateinamen (mit Umlaute) ohne irgendwelche UTF8....