ö, ä, ü usw.. in strings einlesen und abspeichern
-
@Metaby
Selbstverständlich kannst du mit deiner Funktion auch in Textdateien schreiben, wenn du statt der HTML-Maskierung einfach den Code des anderen Zeichensatzes hinschreiben lässt.
Der Artikel in der FAQ scheint mir nicht ganz richtig.
Deutsche Umlaute werden in der Win32-Konsole falsch angezeigt. Der Grund dafür sind Zeichensatz-Inkompatibilitäten. Während man während der Programmierung zumeist den ASCII-Zeichensatz verwendet, wird in der Konsole mit einem ANSI-Zeichensatz gearbeitet.
Ist es nicht eher so, dass in der Konsole mit ASCII und entsprechender Ländererweiterung gearbeitet wird und während der Programmierung (also z.B. in einem Windows-Editor) mit ANSI?
-
oO ok stimmt.. da hab ich jetzt net dran gedacht, is mir aber ehrlichgesagt auch egal, weil ich die funktion wegen html maskierungen geschrieben habe, da ich sie für mein programm brauche
aber danke für den tipp
MFG Max
-
Hi Bruder !
Die ganzen string replacements sind doch Tinnef. Wenns sowieso in eine Datei rein soll, dann gleich rein damit und nicht erst in irgendwelchen strings rumwühlen. :pCheck this out:
#include <stdio.h> #include <string.h> #include <stdlib.h> const char* html_header = "<html><body>\n"; const char* html_footer = "\n</html></body>"; const LineLength = 80; int Perr( const char* msg ) { perror( msg ); return 1; } int Err( const char* msg ) { fprintf( stderr, "%s\n", msg ); return 1; } int ErrExit( FILE* fp, const char* msg ) { fprintf( stderr, "%s\n", msg ); if( fp ) fclose(fp); exit(1); } int ErrClose( FILE* fp ) { if( fp ) fclose(fp); return 1; } int Putstr( FILE* fp, const char* s ) { fprintf( fp, "%s", s ); if ( ferror(fp) ) return 1; return 0; } int Putchar( FILE* fp, const char c ) { fprintf( fp, "%c", c ); if ( ferror(fp) ) return 1; return 0; } int Entities( FILE* fp, const char* s ) { if ( !fp || !s ) return ErrExit( fp, "pfui!" ); while(*s) { switch(*s) { case 'ä': if( Putstr( fp, "ä" ) ) return 1; break; case 'Ä': if( Putstr( fp, "Ä" ) ) return 1; break; case 'ö': if( Putstr( fp, "ö" ) ) return 1; break; case 'Ö': if( Putstr( fp, "Ö" ) ) return 1; break; case 'ü': if( Putstr( fp, "ü" ) ) return 1; break; case 'Ü': if( Putstr( fp, "Ü" ) ) return 1; break; case 'ß': if( Putstr( fp, "ß" ) ) return 1; break; default: if( Putchar( fp, *s ) ) return 1; } s++; } return 0; } FILE* Open( const char* file, const char* mode ) { return fopen( file, mode ); } int Close( FILE* fp ) { if( fclose( fp ) ) return Perr(NULL); return 0; } int main( int argc, char* argv[] ) { FILE* fp = NULL; int i = 0; int len = 0; if( argc < 3 ) return Err( "Usage: program htmlfile content\n" ); if( NULL == ( fp = Open( argv[1], "wt" ))) return Perr( argv[1] ); if( Putstr( fp, html_header ) ) return ErrClose( fp ); for( i=2; i<argc; i++ ) { // Todo: Bessere Zeilentrennung. Entities verlängern Wortlänge, daher // ist eine Überschreitung der mit LineLength eingestellten // Zeilenlänge möglich, bei html Dateien aber nicht unbedingt relevant. if( ( len + strlen( argv[i] ) ) > LineLength ) { if( Putchar( fp, '\n' ) ) return ErrClose( fp ); len = 0; } len += strlen( argv[i] ); if( Entities( fp, argv[i] ) ) return ErrClose( fp ); if( Putchar( fp, ' ' ) ) return ErrClose( fp ); } if( Putstr( fp, html_footer ) ) return ErrClose( fp ); if( Close( fp ) ) return 1; return 0; }
-
CoDiNg WaRrIoR schrieb:
Hi Bruder !
Die ganzen string replacements sind doch Tinnef. Wenns sowieso in eine Datei rein soll, dann gleich rein damit und nicht erst in irgendwelchen strings rumwühlen. :pDa haddu recht. Aber ein C++-Code wäre trotzdem schöner gewesen.