AGB  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Mal wieder Kodierungsprobleme. ANSI UTF8 UTF16

Mal wieder Kodierungsprobleme. ANSI UTF8 UTF16

Ein Thema von LTE5 · begonnen am 17. Nov 2017 · letzter Beitrag vom 20. Nov 2017
Antwort Antwort
Seite 2 von 4     12 34   
LTE5

Registriert seit: 13. Nov 2017
214 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#11

AW: Mal wieder Kodierungsprobleme. ANSI UTF8

  Alt 17. Nov 2017, 23:01
Leider habe ich keine Ahnung wie man das machen soll.
In meiner eigenen Ableitung von TMemIniFile rufe ich im Constructor ganz normal inherited Create(FileName); auf (+ andere Dinge passieren dort natürlich, sonst bräuchte ich keine Ableitung).

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
Delphi2009 TMemIniFile mit UTF8 Encoding

Geändert von LTE5 (17. Nov 2017 um 23:11 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
5.732 Beiträge
 
Delphi 7 Personal
 
#12

AW: Mal wieder Kodierungsprobleme. ANSI UTF8

  Alt 17. Nov 2017, 23:17
Ich habe gelesen, ANSI sei veraltet.
Es gibt Szenarien, in denen die Anwendung einer Ansi-Codierung nicht optimal ist.
In diesen Fällen ist die Anwendung von UTF8 oder UTF16 auf jeden Fall besser.

Wie gehe ich das denn an, wenn ich das Encoding nicht kenne?
Zunächst das Encoding heraus bekommen, und dann alle betroffenen Dateien auf das gleiche Encoding umstellen.
Welches Du verwendest, ist egal, aber es muß bei allen das selbe sein!

Gruß
K-H

Edith:
Muss man das überhaupt angeben? Speziell bei Ini-Dateien ist es komisch. Speichere ich eine frische Ini-Datei mit einer Section wo äöü vorkommt, wird es als ANSI gespeichert.
Speichere ich ohne Umlaute, Speichert Delphi es als UTF8.
Da die Umlaute den Unterschied zwischen ANSI und UTF8 ausmachen, stelle ich mir die Frage woran Du die UTF8-Codierung fest machst?
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector

Geändert von p80286 (17. Nov 2017 um 23:24 Uhr)
  Mit Zitat antworten Zitat
LTE5

Registriert seit: 13. Nov 2017
214 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#13

AW: Mal wieder Kodierungsprobleme. ANSI UTF8

  Alt 17. Nov 2017, 23:22
Ich glaube ich bleibe bei meiner Ini-Ableitung definitiv bei der Zeile inherited Create(aFileName); ohne Encoding-Hexerei.
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.
  Mit Zitat antworten Zitat
mensch72

Registriert seit: 6. Feb 2008
616 Beiträge
 
#14

AW: Mal wieder Kodierungsprobleme. ANSI UTF8

  Alt 17. Nov 2017, 23:23
gaaaanz einfach, nix mit Ableitungen... nur einfach selbst VORHER "erkennen" ob UTF8 oder Ansi

Delphi-Quellcode:
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;
Du musst dir nur fix selbst(wie empfohlen) oder per "Try" mit TEncoding folgende 3 Funktionen basteln
Delphi-Quellcode:
function IsUTF8(const stream:TStream):Boolean;
function DecodeUTF8toString(const stream:TStream):string;
function DecodeANSItoString(const stream:TStream):string;

Geändert von mensch72 (17. Nov 2017 um 23:27 Uhr)
  Mit Zitat antworten Zitat
LTE5

Registriert seit: 13. Nov 2017
214 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#15

AW: Mal wieder Kodierungsprobleme. ANSI UTF8

  Alt 17. Nov 2017, 23:25
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!
  Mit Zitat antworten Zitat
mensch72

Registriert seit: 6. Feb 2008
616 Beiträge
 
#16

AW: Mal wieder Kodierungsprobleme. ANSI UTF8

  Alt 17. Nov 2017, 23:32
..."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
  Mit Zitat antworten Zitat
LTE5

Registriert seit: 13. Nov 2017
214 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#17

AW: Mal wieder Kodierungsprobleme. ANSI UTF8

  Alt 17. Nov 2017, 23:33
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:
das hat wirklich seinen Sinn
Ich verstehe es nicht einmal und werde es auch nie verstehen. Code soll einfach nur funktionieren und das machen was man ihm sagt. Ich habe keine Lust mich mit 100 verschiedenen Encodings rumschlagen zu müssen.

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;

Geändert von LTE5 (17. Nov 2017 um 23:36 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
5.732 Beiträge
 
Delphi 7 Personal
 
#18

AW: Mal wieder Kodierungsprobleme. ANSI UTF8

  Alt 17. Nov 2017, 23:41
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!
Nichts für ungut, aber diese Einstellung halte ich für kurzsichtig. Solange Du die Dateiinhalte auf die ASCII-Zeichen beschränken kannst, mag das gehen. Sobald Du über diesen Tellerrand hinaus gehst, muß Du Dich entscheiden, welche Codierung für Dich, oder besser die Aufgabenstellung, die richtige ist. Solltest Du den Bereich der Lateinische Schrift verlassen (müssen) ist meiner Meinung nach Unicode/UTF16 die richtige Wahl.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
LTE5

Registriert seit: 13. Nov 2017
214 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#19

AW: Mal wieder Kodierungsprobleme. ANSI UTF8

  Alt 17. Nov 2017, 23:43
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.
http://www.jrsoftware.org/isdl.php

1,113,859 Downloads die normale Version, 197,053 die Unicode.

Geändert von LTE5 (17. Nov 2017 um 23:48 Uhr)
  Mit Zitat antworten Zitat
mensch72

Registriert seit: 6. Feb 2008
616 Beiträge
 
#20

AW: Mal wieder Kodierungsprobleme. ANSI UTF8

  Alt 17. Nov 2017, 23:51
..."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
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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:

Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:22 Uhr.
Powered by vBulletin® Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2017 by Daniel R. Wolf