Problem Umlaute



  • Hallo,

    Das folgende Programm soll alle Sonderzeichen ins HTML-Format konvertieren. Folgende Regeln gelten:

    Ersetze das Zeichen ä durch die Zeichenfolge ä
    Ersetze das Zeichen Ä durch die Zeichenfolge Ä
    Ersetze das Zeichen ö durch die Zeichenfolge ö
    Ersetze das Zeichen Ö durch die Zeichenfolge Ö
    Ersetze das Zeichen ü durch die Zeichenfolge ü
    Ersetze das Zeichen Ü durch die Zeichenfolge Ü
    Ersetze das Zeichen ß durch die Zeichenfolge ß
    Ersetze das Zeichen < durch die Zeichenfolge <
    Ersetze das Zeichen > durch die Zeichenfolge >
    Ersetze das Zeichen & durch die Zeichenfolge &
    Ersetze das Zeichen " durch die Zeichenfolge "

    Hier der Quellcode dazu:

    #include <stdio.h>
    #include <stdlib.h>
    
    /* nchars = Anzahl der Zeichen  */
    /* tag    = Sonderzeichen in HTML  */
    /* ziel   = Datei, in die geschrieben wird */
    
    void sonderzeichen(int nchars, char *tag, FILE *ziel)
    {
       int i;
       char zeichen;
       for(i=0; i < nchars; i++)
          {
             zeichen=tag[i];
             putc(zeichen, ziel);
          }
    }
    
    int main(int argc, char **argv)
    {
       FILE *q, *z;
       int zeichen;
       if(argc < 3)
          {
             printf("Benutzung : %s quelle ziel\n",*argv);
             exit(0);
          }
    
       q=fopen(argv[1], "r");
       z=fopen(argv[2], "w");
       if(q == NULL || z == NULL)
          {
             printf("Fehler bei fopen()...");
             exit(0);
          }
    
       while((zeichen=getc(q)) != EOF)
          {
             if(zeichen=='<')
                sonderzeichen(4,"&lt;", z);
             else if(zeichen=='>')
                sonderzeichen(4,"&gt;", z);
             else if(zeichen=='\"')
                sonderzeichen(6,"&quot;",z);
             else if(zeichen=='&')
                sonderzeichen(5,"&amp;",z);
             else if(zeichen=='ä')
                sonderzeichen(6 ,"&auml;",z);
             else if(zeichen=='Ä')
                sonderzeichen(6 ,"&Auml;",z);
             else if(zeichen=='ö')
                sonderzeichen(6 ,"&ouml;",z);
             else if(zeichen=='Ö')
                sonderzeichen(6 ,"&Ouml;",z);
             else if(zeichen=='ü')
                sonderzeichen(6 ,"&uuml;",z);
             else if(zeichen=='Ü')
                sonderzeichen(6 ,"&Uuml;",z);
             else if(zeichen=='ß')
                sonderzeichen(6 ,"&szlig;",z);
             else
                putc(zeichen, z);
          }
       return 0;
    }
    

    Im Anschluss gcc -o neu neu.c....

    Nur der Compiler schmeisst mir Warnings raus, die mir auch mit Google nicht weiterhelfen! Würde mich freuen, wenn hier jemand Rat weiss!
    Was die Warnings bedeuten ist mir schon klar, nur wie ich sie abstelle nicht!

    Folgende Meldung gcc:
    neu.c:40:19: warning: multi-character character constant
    neu.c:41:19: warning: multi-character character constant
    neu.c:42:19: warning: multi-character character constant
    neu.c:44:19: warning: multi-character character constant

    Das Script selber wird ausgeführt, allerdings werden Umlaute nicht umgewandelt!
    gcc version 4.1.2 20061115 (prerelease) (Debian 4.1.1-21)

    Würde mich freuen, wenn mir jemand helfen könnte!

    Grüsse aus Bärlin



  • Erstmal: Stimmen denn die angegebenen Zeilennummern mit denen überein, die vom Forum ergänzt worden sind? Wenn nein, wo ist die Zeile 40 im Originalcode?

    Zweitens: Ich hoffe mal nicht, daß der Fehler, auf den dich dein Compiler aufmerksam machen wollte, beim Kopieren verschwunden ist - die Meldung deutet darauf hin, daß du ein String-Literal mit '...' geschrieben hast.

    Drittens: Die if-else-Kaskade sieht schlimm aus - da hätte ich wohl ein switch() verwendet.



  • CStoll schrieb:

    die Meldung deutet darauf hin, daß du ein String-Literal mit '...' geschrieben hast.

    Hat er vmtl. auch. Wahrscheinlich hat er UTF-8 verwendet...



  • das komische ist, dass es 4 fehler sind. würde er utf-8 verwenden müssten es 7 fehler sein. anscheinend passieren die fehler nicht bei den umlauten sondern bei den anderen zeichen. diese sollten aber im utf-8 nur ein byte lang sein.



  • namenlos schrieb:

    das komische ist, dass es 4 fehler sind. würde er utf-8 verwenden müssten es 7 fehler sein. anscheinend passieren die fehler nicht bei den umlauten sondern bei den anderen zeichen. diese sollten aber im utf-8 nur ein byte lang sein.

    Das komische ist, daß in Zeile 40 (zumindest nach der Zählung des Forums) überhaupt kein Zeichen-Literal vorkam - deswegen ja auch meine Frage, auf welche Zeilen sich die Meldungen tatsächlich beziehen.



  • jep. die zeilennummern passen sicher nicht überein.



  • Erstmal danke für die Posts, war leider schon raus gestern!

    1. Es ist nur ein Auszug aus der Fehlermeldung!
    2. Richtig, es muss die falsche Zeichencodierung sein!

    Alle Fehlermeldungen beziehen sich ausschliesslich auf die deutschen Umlaute!
    Auch zur Qualität des Scriptes kann ich sagen, dass es aus einem Tutorial stammt!

    Meine Frage bezieht sich darauf, wie ich das abstellen kann und das Script so ausgeführt wird, das auch die deutschen Umlaute umgewandelt werden!

    Aufruf file ergibt folgendes:

    neu.c: ISO-8859 C program text

    Ist doch der richtige Zeichensatz, oder?

    Bis später

    .....



  • ein charset aus der ISO-8859 familie is sicher nicht falsch und würde dir auch nie buchstaben erzeugen, die größer als ein byte sind. das problem ist, dass es hier wenig bringt, wenn du den teil postest, da dabei manches umgewandelt sein könnte. schick mir mal die datei, wenn möglich auf das nötigste reduziert, an a34222cd415b3d685c39df2d@gmx.net. vielleicht klappt das besser und ich probier es bei mir zu compilieren.


Anmelden zum Antworten