![]() |
AW: Mal wieder Kodierungsprobleme. ANSI UTF8
Leider habe ich keine Ahnung wie man das machen soll.
In meiner eigenen Ableitung von TMemIniFile rufe ich im Constructor ganz normal
Delphi-Quellcode:
auf (+ andere Dinge passieren dort natürlich, sonst bräuchte ich keine Ableitung).
inherited Create(FileName);
Update: dieser Thread hat jedenfalls das Problem behoben, dass die Datei als ANSI gespeichert wird, wenn sie vorher nicht existierte, aber Umlaute in der Datei zu finden waren ![]() |
AW: Mal wieder Kodierungsprobleme. ANSI UTF8
Zitat:
In diesen Fällen ist die Anwendung von UTF8 oder UTF16 auf jeden Fall besser. Zitat:
Welches Du verwendest, ist egal, aber es muß bei allen das selbe sein! Gruß K-H Edith: Zitat:
|
AW: Mal wieder Kodierungsprobleme. ANSI UTF8
Ich glaube ich bleibe bei meiner Ini-Ableitung definitiv bei der Zeile
Delphi-Quellcode:
ohne Encoding-Hexerei.
inherited Create(aFileName);
So gibt es keine Fehlermeldung. Wenn jemand meint eine Datei unbedingt selber bearbeiten zu müssen, ist es in diesem Falle das eigene Pech. Ansonsten habe ich jetzt alle meine Dateien auf UTF8 ohne BOM umgestellt, da selbst Windows neue Dateien so anlegt. Meinen Code aus Beitrag #1 habe ich unverändert so gelassen. Da ich zu wenig Ahnung von dieser Hexerei habe, befasse ich mich damit nicht weiter und belasse alles so, wie es fehlerfrei funktioniert. |
AW: Mal wieder Kodierungsprobleme. ANSI UTF8
gaaaanz einfach, nix mit Ableitungen... nur einfach selbst VORHER "erkennen" ob UTF8 oder Ansi:)
Delphi-Quellcode:
Du musst dir nur fix selbst(wie empfohlen) oder per "Try" mit TEncoding folgende 3 Funktionen basteln:)
ms:TMemoryStream
s:string; ms:=TMemoryStream.Create; ms.LoadFromFile('filename'); if IsUTF8(ms) then s := DecodeUTF8toString(ms) else s := DecodeANSItoString(ms); ms.free; Memo1.Text:=s; MemIniFile.Text:=s;
Delphi-Quellcode:
function IsUTF8(const stream:TStream):Boolean;
function DecodeUTF8toString(const stream:TStream):string; function DecodeANSItoString(const stream:TStream):string; |
AW: Mal wieder Kodierungsprobleme. ANSI UTF8
Da ich eine universelle Lösung brauche für das Laden von Textdateien UND das Laden/Speichern von Ini-Dateien, kann ich das leider nicht gebrauchen.
Ich belasse von nun an aber alles so wie ich es aktuell habe, da es funktioniert. Dieser ganze Encoding-Kram ist doch der Wahnsinn! |
AW: Mal wieder Kodierungsprobleme. ANSI UTF8
..."Da ich eine universelle Lösung brauche für das Laden von Textdateien UND das Laden/Speichern von Ini-Dateien, kann ich das leider nicht gebrauchen."...
Jedem das seine, die paar da geschrieben Code Zeilen ergeben genau DIE UNIVERSELLE Lösung, die man sogar noch per einem weiterem IF auf zusätzlich UTF16 erweitern kann... aber mach wie du willst, nur schimpfe nicht auf das Encoding-Konzept... das hat wirklich seinen Sinn:) |
AW: Mal wieder Kodierungsprobleme. ANSI UTF8
Ich sehe keine Möglichkeit die oben genannten Codezeilen in eine Ini-Klasse einzubauen.
Da steht zwar "IsUTF8" aber davon habe ich ja eben keine Ahnung. Zitat:
Habe meine Version aus #1 bearbeitet, damit ich noch weniger Kopfschmerzen wegen diesem komischen Encodingkram habe
Delphi-Quellcode:
try
sl.LoadFromStream(ResourceStream{*, TEncoding.UTF8*}); {$WARNINGS OFF} Result := UTF8ToString(sl.Text); {$WARNINGS ON} finally sl.Free; end; |
AW: Mal wieder Kodierungsprobleme. ANSI UTF8
Zitat:
Gruß K-H |
AW: Mal wieder Kodierungsprobleme. ANSI UTF8
Ich hätte absolut kein Problem damit alles nach Unicode umzustellen.
Aber alleine schon die Tatsache, dass es eine Fehlermeldung bei Angabe des TEncodings gibt, wenn die Datei dieses Encoding aber nicht hat lässt mich alles über Board werfen, da ich auf sowas keine Lust habe. Unicode-Anwendungen scheinen aber nicht so populär zu sein. Beispiel an Inno Setup. ![]() 1,113,859 Downloads die normale Version, 197,053 die Unicode. |
AW: Mal wieder Kodierungsprobleme. ANSI UTF8
..."IsUTF8... Ich verstehe es nicht einmal und werde es auch nie verstehen. Code soll einfach nur funktionieren"...
=> UniCode und WideStrings sowie das "TEncoding" von Delphi sind eben NICHT perfekt, wenn es um in der Praxis durchaus übliche Files OHNE BOM geht... daher SCHREIBT MAN SICH DAS EBEN BESSER FIX SELBST, denn vom schimpfen oder verdrängen/ignorieren löst das Problem ja nicht, egal ob du dazu Lust hast oder nicht. In #6 steht recht genau wie man diese Funktion sich selbst fix progammiert.... wenn du "später" zufällig doch mal hängst weil Delphi nun plötzlich bei abgeschalteter Warnung nun NICHT MEHR das macht was "du erwartest", sondern dann nun exakt das was du per Code gesagt hast... dann erkennst du eventuell den Vorteil von so scheinbar völlig unbedeutenten typsicheren Hilfsfunktionen;) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:21 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