iconv für Windows

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

iconv für Windows
Hi,
ich würde mir gerne ne kleine Hilfsanwendung schreiben, die Dateien zwischen verschiedenen Codierungen und deren Ausprägungen konvertieren kann, also iso-8859-1, utf8, utf8+bom, etc. Zusätzlich wären so Kleinigkeiten wie das Anpassen von Zeilenenden noch praktisch. Was fertiges, das kostenlos und einfach zu bedienen ist, hab ich nicht gefunden.

Unicode.org bietet zwar eine Reihe von Zeichentabellen an, aber das ist doch etwas viel Arbeit so. Also dachte ich daran, die iconv-Bibliothek zu integrieren. Leider verhält sich das Ding in Visual Studio 6 ziemlich widerspenstig. Die ganzen Linux-Projekte sind leider ziemlich, naja, Linux-zentriert, erfordern also alles mögliche an Entwicklungswerkzeugen, die mit Linux ausgeliefert werden, die im Visual Studio aber nicht dabei sind. Sowas wie ne shell, autoconf, symlinks im Dateisystem etc. Als ich vor Jahren mal die pcre-Funktionen portiert hab, war das kein Problem. Es gab so ungefähr 5 Dateien, nachher waren’s noch 2, und daraus konnte ich ohne Aufwand eine LIB oder DLL bauen. Aber iconv ist um ein Vielfaches größer (warum eigentlich?) und lässt sich nicht so einfach anpassen.

Hat jemand schonmal sowas gemacht, ein Linux-Programm unter Windows compiliert, möglichst mit Visual Studio 6, und könnte mir erklären, wie ich das anstelle? Am liebsten wäre mir, wenn ich am Schluss nur eine iconv.lib samt passender iconv.h habe, um alles statisch zusammen zu binden. Es kommen im Archiv zwar vereinzelt *.msvc-Dateien vor, aber von Windows redet da generell niemand.

Oder wäre es tatsächlich besser (kleinerer Code, einfacher), die Unicode.org-Tabellen zu verwenden, und iconv wieder zu vergessen?


Wurde für genau diesen Zweck nicht cygwin programmiert?
Bzw. wenn das Programm nur bestimmte Funktionen verwendet, die es sowohl unter Winows wie unter Linux gibt (z.B. Streams für I/O etc.) dann sollte es ja eigentlich einfach so gehen.


cygwin ist jetzt irgendwie das andere Ende von dem was ich mir vorgestellt hatte. Ich wollte ein kleines, portables Programm schreiben, das möglichst aus einer einzigen exe-Datei besteht und nicht noch 100 MB spezielle Umgebung benötigt.

Ich hab keine Ahnung, welche Funktionen iconv so alles braucht, allein die Verzeichnisstruktur ist mir schon rätselhaft. Ich hab halt erstmal versucht, die mitgelieferten Makefiles irgendwie zu verwerten, bevor ich das ganze Paket komplett zerlege.


ich kenne iconv nicht, aber normale linux programme kann man oft zum laufen kriegen, wenn man einfach ein neues vc projekt erstellt und alle header und c-files einfügt.
an den fehlern die der compiler meldet kann man recht schnell erkennen, ob man überhaupt eine chance hat, das ganze unter windows zu nutzen.

wenn iconv spezielle linux funktionen benutzt, was eine lib dieser art wohl nicht sollte, kriegt man es ohne großen aufwand nicht hin.


Hab jetzt versucht, die Dateien (*.c und *.h) einfach ins Projekt einzufügen. Beim Versuch, das erstmal zu übersetzen, meldet VS mir ungültige Zeichen im Präprozessorcode, z.B. hier:

#define BRACIFY(...) { __VA_ARGS__ }

Der “.” gefällt ihm da nicht. Schaut so aus, als würde VC++ mit den Dateien nichts anfangen können. Diese und andere PP-Fehler kommen da ziemlich oft vor.


Ja ok, hat sich mehr oder weniger erledigt. Hab das jetzt gar selber implementiert. Die Codepage Mappings gab’s von unicode.org, den UTF-8-Algorithmus hatte ich vorher schon in PHP, die Umkehrfunktion davon war auch schnell fertig. Und jetzt hab ich alles gleich in .NET gemacht, wegen einer ‘schönen’ Oberfläche. :wink: (Also flexible Fenstergröße, Drag&Drop etc.)


Flexible Fenstergröße, Drag & Drop … dieses .net kann schon was! :gun:


Naja, ich wähl dafür 2, 3 Eigenschaften aus und schon hab ich ne schöne Programmoberfläche fertig und kann mich um die eigentliche Funktionalität kümmern. Der Designer im VS200{3,5} hat’s schon irgendwie drauf! :wink: Dafür würd ich in VC++6 allein nen ganzen Tag rumprogrammieren. Des Weiteren hab ich nachher festgestellt, dass .NET bereits alle möglichen Text-Encodings mitbringt. Das vereinfacht das Verfahren weiter und beschleunigt den Code nochmal massiv. iconv braucht im .NET-Framework praktisch niemand mehr. :*)


zusammenfassend lässt sich also sagen: .net rulez.

allerdings wird, wie FordPrefect bereits erwähnt hat, drag&drop auch schon ansatzweise unter linux unterstützt. zumindest wenn man nicht auf die idee kommt, kde und gnome programme bunt zu mischen.


Ja kann sein, ich hab von Linux-spezifischer UI-Programmierung nicht viel Ahnung. Hier ging es ja auch erstmal nur drum, das ganze unter Windows zu schreiben. Wenn mono irgendwann mal fertiger wird, läuft es da ja vielleicht auch.


Die Kommandozeile ist auch ein UI! Und was fuer ein tolles :]!


Bill Gates=Bush=Hitler
Linux=Karl Marx=Lenin=DDR
AKNE