AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Umgang mit Textdateien verschiedener Kodierungen.
Thema durchsuchen
Ansicht
Themen-Optionen

Umgang mit Textdateien verschiedener Kodierungen.

Ein Thema von MechMac666 · begonnen am 8. Sep 2020 · letzter Beitrag vom 8. Sep 2020
Antwort Antwort
Seite 1 von 2  1 2      
MechMac666

Registriert seit: 9. Nov 2008
95 Beiträge
 
#1

Umgang mit Textdateien verschiedener Kodierungen.

  Alt 8. Sep 2020, 07:57
Hallo,

ich bin gerade über die Änderung in Win10 gestolpert das Textdateien nun in UTF8 gespeichert werden.
Abschalten möchte ich dies nicht, da es ja nicht nur auf meinem Rechner so ist.

Es ist so das ich in meinen Programmen viele Einstellungen in Textdateien speichere. Bisher im ANSI format.
Dazu nutze ich fast überall die TStringlist.
Nun habe ich nach einem Wechsel auf Win10 gemischte Dateien, da einige nur aus Win7 übernommen wurden.
(Soll heißen UTF8 und ANSI)

Eine Testanwendung in der aktuellen Delphi IDE (memo1.lines.loadfromfile(...)) hat eine UTF8 Datei nicht richtig gelesen bezüglich der Sonderzeichen.

Wie sollte ich hier am besten vorgehen? Also auch in Hinblick auf die Zukunft.
Theoretisch müsste ich ja nun grundsätzlich vor jedem öffnen das Dateiformat erkennen und ggf. konvertieren.

Gruß, Andreas
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#2

AW: Umgang mit Textdateien verschiedener Kodierungen.

  Alt 8. Sep 2020, 08:08
Erstmal die Frage: Woran machst du das überhaupt fest? UTF-8 und ANSI unterscheiden sich ja u.U. gar nicht. Gibt es ein UTF-8 BOM?

Zitat:
Wie sollte ich hier am besten vorgehen? Also auch in Hinblick auf die Zukunft.
Am Besten alles als UTF-8 speichern. Um alte und neue Dateien zu unterscheiden, kannst du ein UTF-8 BOM hinzufügen. Unüblich, aber erlaubt. Alles ohne BOM als ANSI betrachten und konvertieren.
  Mit Zitat antworten Zitat
MechMac666

Registriert seit: 9. Nov 2008
95 Beiträge
 
#3

AW: Umgang mit Textdateien verschiedener Kodierungen.

  Alt 8. Sep 2020, 09:23
Erstmal die Frage: Woran machst du das überhaupt fest?
Was mache ich fest? (Verstehe die Frage nicht.)
Zu der letzten Frage: Windows scheint nicht mit BOM zu speichern. Zumindest ist es in Notepad nicht so eingestellt.


Ich habe einige Versuche gemacht mit "tstrings".
-Delphi scheint weiterhin als ANSI zu speichern.
-Wenn ich eine UTF8 Datei lade und wieder speichere ist sie weiterhin UTF8, auch bei modifikation mit ASCII zeichen.
Bei Modifikation mit z.B. "ä" oder "ü" wird daraus beim speichern eine ANSI Datei.


Ok, bleibt das Problem falls ich eine Datei in Notepad bearbeite und anschließend mit Delphi verwenden möchte UND Sonderzeichen enthalten sind.
Im einfachsten Fall eine Liste mit Dateipfaden welche "ä", "ö" etc. enthalten.
Wie soll ich ich nun erkennen ob das UTF8 oder ANSI ist? (Notepad kann's offensichtlich)

Gruß, Andreas
  Mit Zitat antworten Zitat
Papaschlumpf73

Registriert seit: 3. Mär 2014
Ort: Berlin
442 Beiträge
 
Delphi 12 Athens
 
#4

AW: Umgang mit Textdateien verschiedener Kodierungen.

  Alt 8. Sep 2020, 09:39
Dasselbe Problem habe ich auch mit Textdateien aus Notepad seit Win10. Wenn ich es gemerkt habe, habe ich sie dann im Notepad als Ansi gespeichert. Leider aber noch keine Zeit gehabt, mich wirklich darum zu kümmern.
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.737 Beiträge
 
Delphi 6 Enterprise
 
#5

AW: Umgang mit Textdateien verschiedener Kodierungen.

  Alt 8. Sep 2020, 10:04
Nur zum Verständnis: Werden diese Dateien auch außerhalb vom Delphi-Programm manipuliert und das ist dann das Problem? Den Delphi kannst du ja sagen, dass es immer ANSI schreiben und lesen soll.

Ich benutze immer Notepad++ als Texteditor. Da kann man die Codierung erkennen und ändern.
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#6

AW: Umgang mit Textdateien verschiedener Kodierungen.

  Alt 8. Sep 2020, 10:19
Seit kurzem bietet Delphi eine interaktive Option für das Standard-Dateiformat unter Tools - Optionen - Benutzeroberfläche - Editoroptionen - Standarddateocodierung. Vorher konnte man das nur über einen Registry-Eintrag ändern.

Aktuell wird die aktuelle Codierung einer Unit auch in der Statuszeile des Editors angezeigt und lässt sich auch dort ändern. Bei älteren Delphi-Versionen geht das noch über das Kontextmenü.

In allen Fällen schreibt Delphi aber ein BOM in die Datei und benutzt dieses auch für die Erkennung. Ohne BOM wird strikt ANSI angenommen. Obwohl unüblich (zumindest unter Linux) - für Delphi ist das UTF8-BOM obligatorisch! Das hat u.A. auch Vorteile bei den diversen Versionskontrollsystemen, da dort auch schon mal andere Annahmen herrschen als bisher unter Windows üblich.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Umgang mit Textdateien verschiedener Kodierungen.

  Alt 8. Sep 2020, 10:41
@UWE, geht das ìnzwischen auch bei DFMs?

Hab es noch nicht ausprobiert, aber da ich zufällig gestern mal wieder das Problem in XE hatte, dass bei DFMs das UTF-8-BOM verschwindet.
Außerdem macht das Text-EnDecoding bzw. Binär-Text-Umkodieren dort ja eine eigene "Funktion".


Entweder Delphi/IDE muß das besser können oder ich muß an unserem fanatischen Linux-Jünger vorbei im GIT für Delphi versuchen das anzupassen.
GIT (Tortoise/GitHub) hat Merge paar Problemchen, wenn es jeweils UTF-8 und ANSI versucht zu mergen.
$2B or not $2B

Geändert von himitsu ( 8. Sep 2020 um 10:46 Uhr)
  Mit Zitat antworten Zitat
MechMac666

Registriert seit: 9. Nov 2008
95 Beiträge
 
#8

AW: Umgang mit Textdateien verschiedener Kodierungen.

  Alt 8. Sep 2020, 10:55
Seit kurzem bietet Delphi eine interaktive Option für das Standard-Dateiformat unter Tools - Optionen - Benutzeroberfläche - Editoroptionen - Standarddateocodierung. Vorher konnte man das nur über einen Registry-Eintrag ändern.
Deine Aussage bezieht sich aber jetzt auf die Projektdateien (*.pas, *.dfm, etc.)
Darum geht es hier ja nicht.


Nur zum Verständnis: Werden diese Dateien auch außerhalb vom Delphi-Programm manipuliert und das ist dann das Problem?
Bis vor fünf Minuten hätte ich "Ja" gesagt, aber gerade habe ich ein Programm von mir aus 2017 gestartet, welches eine "Jobliste" ganz simpel aus einer TStringlist speichert:
Und das Ergebnis ist laut Notepad in UTF8. Allerdings macht es das auch unter WIN 7. Aber in beiden Fällen ist das nicht gewollt. Es ist nur nie aufgefallen, weil Notepad unter Win 7 das so nicht anzeigt und bisher keine Sonderzeichen enthalten waren.
Ich muss da erstmal weitere Versuche machen...
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Umgang mit Textdateien verschiedener Kodierungen.

  Alt 8. Sep 2020, 11:14
Jetzt wo du es sagst.

Vor paar Tagen war mir das im Windows auch aufgefallen. (ich dachte aber ich hätte nur nicht richtig geguckt)
Notepad speichert neuerdings als UTF-8, wenn man eine neue Textdatei erstellt hat.
(auf Arbeit bekomm ich sowas nicht mit, weil jemand der meinung war wir müssen unbedingt so einen hässlichen Notepad2-mod installieren, der bei ALLEN die notepad.exe ersetzt)
$2B or not $2B
  Mit Zitat antworten Zitat
MechMac666

Registriert seit: 9. Nov 2008
95 Beiträge
 
#10

AW: Umgang mit Textdateien verschiedener Kodierungen.

  Alt 8. Sep 2020, 11:56
Jetzt wo du es sagst.

Vor paar Tagen war mir das im Windows auch aufgefallen. (ich dachte aber ich hätte nur nicht richtig geguckt)
Notepad speichert neuerdings als UTF-8, wenn man eine neue Textdatei erstellt hat.
(auf Arbeit bekomm ich sowas nicht mit, weil jemand der meinung war wir müssen unbedingt so einen hässlichen Notepad2-mod installieren, der bei ALLEN die notepad.exe ersetzt)
Tja, wenn du mal was verrücktes sehen willst:
Create ne Tstringlist, adde eine Zeile "Hello MS" und speichere.
Das macht du nochmal mit "Hällo M$" und wieder speichern.

Die erste Datei ist in UTF8 und die zweite in ANSI. Selbst wenn du explizit in beiden
Fällen sagst er soll als ANSI speichern.

Zumindest wenn man Notepad glaubt...
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 17:40 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