Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi ReadString aus TIniFile fehlerhaft (https://www.delphipraxis.net/165573-readstring-aus-tinifile-fehlerhaft.html)

Moony 6. Jan 2012 10:12

ReadString aus TIniFile fehlerhaft
 
Hallo zusammen,

habe eine Textdatei im Iniformat. In dieser Datei wird an einer Stelle ein SQL Befehl gespeichert, den ich dann mit TIniFile.ReadString() auslese. Der SQL Befehl beinhaltet Sonderzeichen im Alias als Feldname wie 'Gültig bis'.
Jetzt mein Problem: Leider werden die Sonderzeichen als Hyroglyphen eingelesen und nicht wie es sein sollte. In der Datei steht der Befehl richtig drin, im Programm kann der SQL Befehl leider nicht ausgefhrt werden.

Hoffe auf Hilfe! Danke & Gruß,
Moony

DeddyH 6. Jan 2012 10:21

AW: ReadString aus TIniFile fehlerhaft
 
Wurde die Ini mit einem anderen Programm erstellt? Es scheint sich ja um unterschiedliche Kodierungen zu handeln.

Moony 6. Jan 2012 10:40

AW: ReadString aus TIniFile fehlerhaft
 
Ja, die Datei wurde von einer Webanwendung geschrieben und ich verarbeite diese. Die Kodierung der Datei ist UTF8 ohne BOM.

DeddyH 6. Jan 2012 11:00

AW: ReadString aus TIniFile fehlerhaft
 
Dann versuch mal
Delphi-Quellcode:
StringVar := Utf8Decode(Ini.ReadString(...));
[edit] Oder Utf8ToString, da UTF8Decode als veraltet markiert ist. [/edit]

himitsu 6. Jan 2012 11:19

AW: ReadString aus TIniFile fehlerhaft
 
Zitat:

Zitat von Moony (Beitrag 1144625)
Die Kodierung der Datei ist UTF8 ohne BOM.

Und woher soll dann die Auslesefunktion das wissen?

Der Standard ist nunmal ANSI, also wird auch als ANSI ausgelesen.



Zu dem Vorschlag von DeddyH:
Aufpassen, denn dein Delphi 2010 ließt es als ANSI aus, konvertiert es nach Unicode (ANSI>Unicode) und Utf8Decode würde das Unicode jetzt als RawString (hoffentlich zufällig mit einer Umkodierung nach ANSI) übernehen, versuchen als UTF-8 zu interpretieren und dann nach versuchen nach Unicode umzuwandeln. :angle2:


Ich weiß auch garnicht, ob UTF-8 von der verwendeten WinAPI, welche in TIniFile gekapselt ist, überhaupt unterstützt wird.


Verwende stattdessen z.B. TMemIniFile und gib als Encoding das UTF-8 explizit an.
TMemIniFile arbeitet intern mit einer TStringList, welche es auch ohne BOM uslesen und konvertieren kann, danach werden alle Leseoperationen intern über diese StringList abgehandelt.

Moony 6. Jan 2012 11:31

AW: ReadString aus TIniFile fehlerhaft
 
Ok, dann versuche ich es mit Tmeminifile und melde mich zurück.

Moony 6. Jan 2012 12:09

AW: ReadString aus TIniFile fehlerhaft
 
So, habe es versucht, aber ich besitze keine Encoding-Eigenschaft. Ich arbeite bei diesem Projekt mit Delphi 2007.

Bjoerk 6. Jan 2012 12:27

AW: ReadString aus TIniFile fehlerhaft
 
Zitat:

Zitat von Moony (Beitrag 1144649)
So, habe es versucht, aber ich besitze keine Encoding-Eigenschaft. Ich arbeite bei diesem Projekt mit Delphi 2007.

Dann ist string ein Alias auf Ansistring, egal ob TInfile oder TMemInifile.
Probier mal AnsiToUtf8 o. ä..

DeddyH 6. Jan 2012 12:28

AW: ReadString aus TIniFile fehlerhaft
 
Das kann man aber auch sagen, wenn im Profil D2010 angegeben ist. Neuer Versuch:
Delphi-Quellcode:
var
  s: UTF8String;
begin
  ...
  s := UTF8String(Ini.ReadString(...));
  ShowMessage(UTF8ToAnsi(s));
Ob der explizite Typecast etwas bringt, weiß ich nicht, schaden kann es aber wohl kaum. In einem kurzen Test wurde zumindest bei mir "Gültig bis" korrekt ausgegeben.

Moony 6. Jan 2012 13:10

AW: ReadString aus TIniFile fehlerhaft
 
Danke, das funktioniert....

Habe jetzt lediglich UTF8ToAnsi an eine Variable des Typs AnsiString übergeben und es klappt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:34 Uhr.
Seite 1 von 2  1 2      

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