Am Mittwoch, 30. November 2016, 20:48:15 schrieb Dr.-Ing. Dieter Jurzitza:
Hallo zusammen, vielleicht bin ich hier völlig falsch, vielleicht kann mir aber auch jemand helfen.
Ich möchte mittels "fprintf" Strings in eine Datei schreiben (unter linux, ist aber vermutlich davon unabhängig). Ein Minimalbeispiel:
#include <stdio.h>
int main (void){ FILE *outfile;
outfile=fopen("test.dat", "w");
fprintf(outfile, ">>%-36s<<\n", "Hier beginnt es:"); fprintf(outfile, ">>%-36s<<\n", "Viele Grüße!"); fprintf(outfile, ">>%-36s<<\n", "Viele Gruesse!"); fclose (outfile); return(0); }
Die Zeile mit "Viele Grüße" (2 Umlaute) ist 2 Zeichen kürzer als die anderen beiden Zeilen, wohl weil "C" für "ü" und "ß" als utf8 je 2 Zeichen vorsieht - in der Darstellung sind es aber nur je 1 Zeichen, so dass die zweite Zeile im Beispiel "zu kurz" wird und die Formatierung der folgenden Zeichen in dieser Zeile "kaputt", sprich: um zwei Zeichen nach links verschoben ist. Weiß hier jemand eine Lösung? Googeln hat mich nicht weitergebracht, ich habe auch mit "setlocale" herumexperimentiert, ist aber scheinbar ebenfalls egal.
Ach ja, "file" auf die Ausgabedatei liefert "test.dat: UTF-8 Unicode text". Die Problematik ist übrigens bei openSUSE 13.1 und bei leap 42.1 identisch, ich denke nicht, dass es eine releasespezifische Problematik ist.
Vielen Dank schonmal für's Mitdenken,
ist gerade anders herum. fprintf arbeitet per default mit 8bit-ASCII. will man UTF8 muss man entsprechende %-Parmeter nutzen. man printf sagt dazu: %s If an l modifier is present: The const wchar_t * argument is expected to be a pointer to an array of wide characters. Wide characters from the array are converted to multibyte characters oder man benutzt die wprintf Familie von Routinen wprintf, fwprintf, swprintf, vwprintf, vfwprintf, vswprintf - formatted wide-character output conversion Jetzt muss man noch aufpassen, was der benutzte Texteditor mit Umlauten macht: Speichert er als UTF8 oder 8bit-ASCII? C ist an der Stelle eben noch in der 7 bzw 8bit ASCII-Welt geboren und verhaftet. Am einfachsten also: Editor dazu bringen 8bit ASCII (iso latin 8859-15 - westeuropäisch mit € Zeichen) zu speichern. Wenn schon utf8, dann konsequent überall.... Bye Jürgen -- Dr.rer.nat. Jürgen Vollmer, Am Rennbuckel 21, D-76185 Karlsruhe Tel: +49(721) 92 04 87 1 Fax: +49(721) 92 04 87 2 Juergen.Vollmer@informatik-vollmer.de www.informatik-vollmer.de ------------------------------------------------------------------------------- Diese EMail ist elektronisch mittels GPG / PGP signiert. Diese elektronische Unterschrift ist in einem EMail-Anhang enthalten. Leider kann die Signatur ohne die Installation entsprechender Programme weder geprüft noch angezeigt werden. Mehr dazu unter: http://www.gnupg.org oder auch http://www.pgpi.org -------------------------------------------------------------------------------