Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Ini => ReadString liefert falsche Ergebnisse bei Umlauten (https://www.delphipraxis.net/192836-ini-%3D-readstring-liefert-falsche-ergebnisse-bei-umlauten.html)

SneakyBagels 23. Mai 2017 18:49

Ini => ReadString liefert falsche Ergebnisse bei Umlauten
 
Mir ist heute zum ersten mal aufgefallen, dass Ini => ReadString keine Umlaute lesen kann. Die Ini wurde vom Programm selber geschrieben.
Man könnte natürlich abc := Utf8ToString(IniFile_.ReadString( machen aber ist das gut so?

Oder gibt es hier eine andere Möglichkeit?

himitsu 23. Mai 2017 18:58

AW: Ini => ReadString liefert falsche Ergebnisse bei Umlauten
 
UTF-8 erstmal garnicht.
IniFile.ReadString einen String und seit Delphi 2009 ist ein String Unicode. (wenn, dann ist der Fehler früher, beim Auslesen und Decodieren der Datei)

INI kann offiziell nur ANSI oder Unicode (UTF-16 mit BOM).

Wird eine neue Datei erstellt und da landen Unicode-Zeichen drin, dann wird sie als Unicode erstellt.
So weit erstmal zur "offiziellen" API von Windows.

In wie weit Codegear/Embarcadero beim TMemIniFile ab Delphi 2009 das auch beachtet haben, weiß ich grade nicht.


"Text"-Dateien ohne BOM werden im Windows "allgemein" erstmal als ANSI angesehn.
Unter Linux/Apple ist die Standard-Codierung für solche Dateien dagegen UTF-8.

SneakyBagels 23. Mai 2017 19:04

AW: Ini => ReadString liefert falsche Ergebnisse bei Umlauten
 
Ich habe keine Ahnung warum aber ich bin das Ganze noch einmal durchgegangen und habe spezielle Zeichen in die Ini schreiben lassen und anschließend wieder ausgelesen.
Jetzt funktioniert es, obwohl ich im Vergleich zu vorhin nichts anders gemacht habe.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:41 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