AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Probleme mit Zeichensatz

Ein Thema von Cubysoft · begonnen am 12. Apr 2015 · letzter Beitrag vom 12. Apr 2015
Antwort Antwort
Cubysoft

Registriert seit: 5. Sep 2014
Ort: Ludwigshafen
76 Beiträge
 
Delphi XE8 Professional
 
#1

Probleme mit Zeichensatz

  Alt 12. Apr 2015, 22:33
Hallo,

zur Erklärung meines Programms:

Mein Programm läd von einer Internetseite eine Datei herunter (unbekannter Zeichensatz). Nun läd mein Programm diese Datei in den Arbeitsspeicher.
(Problem besteht sowohl beim Laden der Datei über eine Stringlist (Stringlist.LoadFromFile) als auch über AssignFile -> Reset -> Readln)

Ich benutze als Speichermedium im Speicher eine Variable vom Typ String (müsste in XE7 also UnicodeString sein). Das Problem ist, dass mein Programm aus

"Éibhear Dunn" -> "Éibhear Dunn" macht. Also anscheinend ein Problem mit der Kodierung hat. Ich habe die Datei einfach mal in Notepad++ geöffnet und bekomme dort angezeigt, dass sie UTF8 kodiert ist. Ändere ich die Kodierung in notepad++ auf ANSI wird der genannte Text ebenso falsch dargestellt.

Ich selbst habe leider garkeine Ahnung von Kodierungen, bin also relativ überfragt, wie ich nun handeln muss. Ich habe schon versucht mit der Funktion UTF8Encode und anderen Funktionen, die ich so bei meiner Suche entdeckt habe zu arbeiten. Leider immer mit dem selben Ergebnis.


Was eventuell noch erwähnenswert wäre:

Der Zweck meines Programms ist es im Grunde, einen Text, den der Benutzer in ein Edit einträgt mit dem in der Datei zu vergleichen. Dazu habe ich einen kleinen Test durchgeführt:

Delphi-Quellcode:
var
 s: String;
 fs: String;
begin
 s := 'Éibhear Dunn';
 ShowMessage(s); {funktioniert: Ausgabe: Éibhear Dunn}
 ShowMessage(ed_test.Text); {funktioniert: Ausgabe: Éibhear Dunn -> manuelle Eingabe im Edit}

 //gekürzt
 fs := ReadLn(f,s);
 ShowMessage(s); {falsche Ausgabe, wie oben beschrieben}
end;
Ich hoffe ihr könnt mir helfen

EDIT:

Habe auch noch einige Tests durchgeführt. Ich habe einfach ein Memo die Datei laden lassen, über memo.lines.LoadFromFile. Auch hier zeigt er (wie zu erwarten) das falsche an. Kopiere ich den Text allerdings aus Notepad++ (Strg+C) und füge ihn im normalen Windows Editor ein (Strg+V) und speichere diese Datei, so ist die neue Datei lesbar. Allerdings zeigt mir Notepad beim öffnen auch an, dass die neue Datei nun ANSI kodiert ist.
Ich schließe deshalb daraus, dass Delphi nicht mit UTF8 Dateien umgehen kann.
Tobias

Geändert von Cubysoft (12. Apr 2015 um 23:04 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.014 Beiträge
 
Delphi 12 Athens
 
#2

AW: Probleme mit Zeichensatz

  Alt 12. Apr 2015, 23:18
Falsch, man schließt daraus, so wie es übrigens auch in der OH erklärt wird, daß die alten Pascal-Dateifunktionen aus kompatibilitätsgründen standardmäßig die Strings als ANSI schreibt und auch liest.
Ebenso wie die TStringList, wenn sie kein entsprechendes BOM findet.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Cubysoft

Registriert seit: 5. Sep 2014
Ort: Ludwigshafen
76 Beiträge
 
Delphi XE8 Professional
 
#3

AW: Probleme mit Zeichensatz

  Alt 12. Apr 2015, 23:41
Ich habe mein Problem nun gelöst. Ich habe beim Öffnen der Datei einfach das Encoding angegeben:

Delphi-Quellcode:
var
sl: TStringList
begin
 sl := TStringList.Create;
 sl.LoadFromFile('test.dat', TEncoding.UTF8);
end;
Das funktioniert nun ganz toll eigentlich. Ich würde meiner Frage allerdings gerne etwas ergänzen. Code kann ich nicht posten, weil das Projekt schon sehr umfangreich ist. Das Prinzip ist folgendes:

1. Programm läd Datei A (UTF8 codiert) herunter
2. Programm öffnet die Datei A (Stringlist)
3. Programm filtert wichtige Informationen und schreibt Zeilenweise (AssignFile, Rewrite, WriteLn, Closefile) in Datei B
4. Programm öffnet Datei B (Stringlist -> TEncoding.UTF8)

Dieses Prinzip funktioniert nun bestens. Ich frage mich nun nur, ob Delphi nicht einfach gleich Datei A mit TEncoding.UTF8 laden kann und dann also ANSI encoding abspeichern kann..
Tobias
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.014 Beiträge
 
Delphi 12 Athens
 
#4

AW: Probleme mit Zeichensatz

  Alt 12. Apr 2015, 23:49
Ich frage mich nun nur, ...
Delphi-Referenz durchsuchenTStrings.SaveToFile
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Cubysoft

Registriert seit: 5. Sep 2014
Ort: Ludwigshafen
76 Beiträge
 
Delphi XE8 Professional
 
#5

AW: Probleme mit Zeichensatz

  Alt 12. Apr 2015, 23:53
Das habe ich schon versucht, aber die Stringlist speichert in UTF 8 ohne BOM. Ich mache wohl irgendwas falsch.

Die Sache ist auch, dass ich nicht weiß, welchen Zeichensatz ich für die Daten nutzen soll. Im Prinzip brauche ich einen Zeichensatz, der alle Zeichen der Sprachen Französisch, Deutsch und Englisch erfassen kann.

EDIT: Sry funktioniert doch. Habe die Dateien jetzt im ANSI Format. Hat ANSI irgendwelche Nachteile gegenüber UTF8 und könnte damit zu Problemen führen?

Also die Frage, die ich jetzt hätte: Ist es besser alles Dateien im UTF8 Format abzuspeichern oder im ANSI. Habe jetzt eigentlich beides hinbekommen, ich weiß nur nicht ob ich mit ANSI nicht Nachteile habe. Im Internet steht oft, dass diesem Zeichensatz einige Zeichen fehlen..
Tobias

Geändert von Cubysoft (13. Apr 2015 um 00:04 Uhr)
  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:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:34 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