UTF8 umwandeln

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Ullman
Beiträge: 5
Registriert: Fr 28. Feb 2014, 23:08
OS, Lazarus, FPC: Windows8.1 64bit (L 1.4.0 FPC 2.6.4)
CPU-Target: x86
Wohnort: Krefeld

Re: UTF8 umwandeln

Beitrag von Ullman »

Danke Theo,
ich werde mich damit beschäftigen und lasse dich wissen wie es lief :-)

Prinzipiell: gibt es Strategien für den Umgang mit Text-Dateien?
Ich meine, muss man jetzt sogar "dämliche" Text-Dateien erst untersuchen und analysieren bis man weiß, wie man darauf zugreifen kann?
Müsste das nicht über die entspr. Datei-Funktionen innerhalb der IDE oder des Compilers erledigt werden?
Ich will hier keine neue Diskussion über Unicode und dergleichen lostreten - davon gibt es genug.
Ein paar davon habe ich gelesen und in der Regel wird es irgendwann wirr - aber einen Plan zum Umgang konnte ich nicht erkennen.
Ist FPC 3.0 und höher die Lösung?
Wie regeln denn andere Umgebungen diese Problematik?

LG Ullman
"When a man speaks in a forest, and no woman is there to hear him, is he still wrong?"

marcov
Beiträge: 1102
Registriert: Di 5. Aug 2008, 09:37
OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
CPU-Target: 32/64,PPC(+64), ARM
Wohnort: Eindhoven (Niederlande)

Re: UTF8 umwandeln

Beitrag von marcov »

Ullman hat geschrieben: Prinzipiell: gibt es Strategien für den Umgang mit Text-Dateien?
Ich meine, muss man jetzt sogar "dämliche" Text-Dateien erst untersuchen und analysieren bis man weiß, wie man darauf zugreifen kann?
Das ist immer so gewesen, wenn mehrere Eincodierungen im Spiel sein. Verlieren von Akzenten in Anwendung ist nichts von dieser Zeit alleine.
Müsste das nicht über die entspr. Datei-Funktionen innerhalb der IDE oder des Compilers erledigt werden?
Nein.
Ich will hier keine neue Diskussion über Unicode und dergleichen lostreten - davon gibt es genug.
Ein paar davon habe ich gelesen und in der Regel wird es irgendwann wirr - aber einen Plan zum Umgang konnte ich nicht erkennen.
Ist FPC 3.0 und höher die Lösung?
Wenn, denn nur für Datei Namen, nicht der Inhalt der Dateien.
Wie regeln denn andere Umgebungen diese Problematik?
Typisch: Nicht. Sie schreiben eine einzige Einkodierung vor, und lassen den Rest an der Programmieren über. Bieten bestens ein Paar Hilfe Funktionen.

Teilweise ist das auch weil in gegensatz zu FPC/Delphi nicht entworfen sein mit Window's mehrere Einkodierungen zu unterstützen.

Benutzeravatar
theo
Beiträge: 10904
Registriert: Mo 11. Sep 2006, 19:01

Re: UTF8 umwandeln

Beitrag von theo »

Ullman hat geschrieben: Ich meine, muss man jetzt sogar "dämliche" Text-Dateien erst untersuchen und analysieren bis man weiß, wie man darauf zugreifen kann?
Dein BOM weist darauf hin, dass deine Datei in UTF-16 (LE) kodiert ist.
Eine Stringlist kann damit nichts anfangen, deshalb hilft hier TCharEncStream. Es nimmt dir in diesem Fall auch die Analyse ab.
Schau dir die Demo an. Du kannst damit alle Textdateien öffnen. Bei 8Bit Ansi kann es natürlich nur raten (System).

Patito
Beiträge: 203
Registriert: Di 22. Sep 2009, 13:08
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: UTF8 umwandeln

Beitrag von Patito »

marcov hat geschrieben:
Ullman hat geschrieben: Ist FPC 3.0 und höher die Lösung?
Wenn, denn nur für Datei Namen, nicht der Inhalt der Dateien.
Hm... Was ist denn da gerade geplant?
Wenn man nach dem Encoding von Filenamen unter Linux sucht, stößt man als Antwort oft auf "binärer Blob".

http://unix.stackexchange.com/questions ... s-on-linux

Alles was zwingend ein bestimmtes Encoding erfordert und zwangs-konvertiert ist da problematisch.

Dateinamen kommen aus einem externen System. Ich bezweifele mal, dass man es auf allen Plattformen/Filesystemen
damit einfacher hat als mit den Datei-Inhalten.

marcov
Beiträge: 1102
Registriert: Di 5. Aug 2008, 09:37
OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
CPU-Target: 32/64,PPC(+64), ARM
Wohnort: Eindhoven (Niederlande)

Re: UTF8 umwandeln

Beitrag von marcov »

Patito hat geschrieben:
Alles was zwingend ein bestimmtes Encoding erfordert und zwangs-konvertiert ist da problematisch.
Das ist schön für Puristen und die tieferen Ebenen Applikationen, aber wenn man nur ein Datei Name darstellen muss (im GUI) geht das schon schief.

Display fordert immer eine gewisse Charakter Mapping

Patito
Beiträge: 203
Registriert: Di 22. Sep 2009, 13:08
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: UTF8 umwandeln

Beitrag von Patito »

marcov hat geschrieben:
Patito hat geschrieben:
Alles was zwingend ein bestimmtes Encoding erfordert und zwangs-konvertiert ist da problematisch.
Das ist schön für Puristen und die tieferen Ebenen Applikationen, aber wenn man nur ein Datei Name darstellen muss (im GUI) geht das schon schief.

Display fordert immer eine gewisse Charakter Mapping
Das klingt jetzt sehr nach einer GUI-zentrierten denkweise...
"Dieses File darfst Du nicht löschen, da der Filename in der GUI nicht schön aussieht..." Ouch!

Mal schauen...

http://en.wikipedia.org/wiki/Comparison ... ems#Limits

-> Filesysteme selbst haben meistens kein wirkliches Encoding.

Was eine UTF-8 File-API rettet ist, das die meisten (alle neueren?) Betriebssysteme davon nur eine gemountete Version zeigen,
die dann (oft/immer?) ein Encoding hat.

Solange alle Systeme mitmachen und niemand den Overhead der Umkonvertierung mit irgendeiner raw-Option
ausschaltet könnte eine UTF-8 API funktionieren. Arg viel Vertrauen habe ich da aber nicht.

Mathias
Beiträge: 6941
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: UTF8 umwandeln

Beitrag von Mathias »

Mal schauen...

http://en.wikipedia.org/wiki/Comparison ... ems#Limits
Das es so viele Dateisystem gibt, hätte ich nicht gedacht. :shock:
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Patito
Beiträge: 203
Registriert: Di 22. Sep 2009, 13:08
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: UTF8 umwandeln

Beitrag von Patito »

Mathias hat geschrieben: Das es so viele Dateisystem gibt, hätte ich nicht gedacht. :shock:
Gut, dass bei den erlaubten Zeichen manchmal einfach "Unknown" steht... :-(

Naja. Das Chaos gibt es ja schon lange, und zur Zeit könnten die Betriebssysteme den Zoo halbwegs im Griff haben.

Ich vermute aber ein wenig, dass mit den derzeitigen Lese-Geschwindigkeiten irgendwann jemand darauf kommt,
dass Filenamen-Checks/Umwandlungen irgendwo ein Bottleneck in der IO sind.
Und kurz darauf hat man wieder die Filesysteme mit den echten rohen Filenamen gemountet...

Ullman
Beiträge: 5
Registriert: Fr 28. Feb 2014, 23:08
OS, Lazarus, FPC: Windows8.1 64bit (L 1.4.0 FPC 2.6.4)
CPU-Target: x86
Wohnort: Krefeld

Re: UTF8 umwandeln

Beitrag von Ullman »

theo hat geschrieben: Dein BOM weist darauf hin, dass deine Datei in UTF-16 (LE) kodiert ist.
Eine Stringlist kann damit nichts anfangen, deshalb hilft hier TCharEncStream. Es nimmt dir in diesem Fall auch die Analyse ab.
Schau dir die Demo an. Du kannst damit alle Textdateien öffnen. Bei 8Bit Ansi kann es natürlich nur raten (System).
Ich habe mir deine Demos und die Sourcen angesehen: Macht genau was es soll! Sehr schön :D
Ich weiß (noch) nicht wirklich was du da anstellst, aber es zieht mir den "Span aus dem Hintern" und mir läuft die Zeit weg.
Darf ich Teile deiner Software verwenden?

LG Ullman
"When a man speaks in a forest, and no woman is there to hear him, is he still wrong?"

Ullman
Beiträge: 5
Registriert: Fr 28. Feb 2014, 23:08
OS, Lazarus, FPC: Windows8.1 64bit (L 1.4.0 FPC 2.6.4)
CPU-Target: x86
Wohnort: Krefeld

Re: UTF8 umwandeln

Beitrag von Ullman »

Hallo marcov,

ich habe eine kleine Weile über deine Antworten auf "meinen" Teil nachgedacht: ich denke du hast in der Tat recht.
Es ist nicht die Aufgabe des Compilers alle Antworten auf alle denkbaren Fragen zu kennen...

Dumm an diesem konkreten Fall ist nur, dass es ziemlich frustierend ist, nicht aus dem Stand in der Lage zu sein, eine "einfache" Textdatei zu manipulieren.
Der Witz bei Log-Files ist, oder war, ja gerade, dass sie in einem simplen File (=Textfile (jedenfalls früher... :cry: ) vorliegen und sie darüber leicht bearbeiten werden (konnten).
Insofern liegt es dann ev. doch wieder bei den Compiler-Bauern Hilfsfunktionen bereit zu stellen, die einem hier Arbeit abnehmen.
Denn es gibt ja auch so etwas wie "fertige" Druck-Funktionen die "einfach" funktionieren, ohne das jeder seinen eigenen Treiber basteln müsste...

Hm, vielleicht bin ich ja auch einfach nur auf dem falschen Dampfer unterwegs...
"When a man speaks in a forest, and no woman is there to hear him, is he still wrong?"

Benutzeravatar
theo
Beiträge: 10904
Registriert: Mo 11. Sep 2006, 19:01

Re: UTF8 umwandeln

Beitrag von theo »

Ullman hat geschrieben: Darf ich Teile deiner Software verwenden?
Grundsätzlich ist Software zum Verwenden da.
Ich weiß aber nicht, was du mit "Teile" meinst.
Du kannst die Units verwenden, wenn du die üblichen Anstandsregeln befolgst. :wink:

Antworten