Ausgabe von deutschen Umlauten



  • Hallo zusammen,

    gibt es eine Möglichkeit, deutsche Umlaute mit C auszugeben (bzw. in einer Datei abzulegen)?

    Mit

    fprintf(fp, "Hier sind die Umlaute ä,ö,ü");
    

    habe ich wenig Erfolg (natürlich wird vorher Datei geöffnet und geschlossen).
    Kann mir da jemand weiterhelfen?

    Danke Euch!

    P.S: Ich programmiere unter Linux (gcc)





  • Bei mir hilft das ganze leider nichts ich verwende auch den gcc (Ubunut 5.10). Bei mir werden statt Umlaute Fragezeichen oder Rechtecke ausgegeben. Kann mir jemand helfen?



  • Wenn du z.B.

    printf("\x84");
    

    schreibst werden bei dir Fragezeichen oder Rechtecke ausgegeben?



  • Exakt! Der Code:

    #include <stdio.h>
    
    int main(void)
    {
    printf("\x84");
    }
    

    liefert als Ausgabe ein Rechteck! Was kann man denn da machen? Woran könnte das liegen?



  • Vielleicht funktioniert ja das bei dir

    #include <stdio.h> 
    
    int main(void) 
    { 
    	char ae = char(132); // 132 --> ä
    	printf("%c", ae); 
    }
    


  • oder das?

    printf("Umlaute Oktal : \204 \216 \224 \231 \201 \232 \341  \n");
    


  • vielleicht zeigt zeine shell die zeichen nicht an, weils keine deutsche shell ist? *mutmassung*



  • @net:

    Die Ausgabe war:

    Umlaute Oktal : \204 \216 \224 \231 \201 \232 \341

    !!!!!??????

    @c.rackwitz:

    Ich glaube du hast recht, wenn ich locale in die Bash eingeben erhalte ich folgende Ausgabe:

    LANG=en_US.UTF-8
    LC_CTYPE="en_US.UTF-8"
    LC_NUMERIC="en_US.UTF-8"
    LC_TIME="en_US.UTF-8"
    LC_COLLATE="en_US.UTF-8"
    LC_MONETARY="en_US.UTF-8"
    LC_MESSAGES="en_US.UTF-8"
    LC_PAPER="en_US.UTF-8"
    LC_NAME="en_US.UTF-8"
    LC_ADDRESS="en_US.UTF-8"
    LC_TELEPHONE="en_US.UTF-8"
    LC_MEASUREMENT="en_US.UTF-8"
    LC_IDENTIFICATION="en_US.UTF-8"
    LC_ALL=

    Alles ist auf US eingestellt!!! Mein System läuft auch auf englisch!!! Wahrscheinlich liegt es daran.



  • dann musst du utf8 ausgeben. ich geb mal ein beispiel:
    "\xc2\x84 ae\n\xc2\x94 oe\n\xc2\x81 ue\n\xc3\xa1 sz"
    (python code: unicode("ä ae\nö oe\nü ue\nß sz", 'iso-8859-1').encode('utf8'))
    in utf8 wird jedes nicht-ascii zeichen (128 und groesser) als multibytezeichen kodiert. sieht man an z.b. \xc2\x84, welches ein utf8 'ä' ist.

    probier das mal, sollte das ausgeben:

    ä ae
    ö oe
    ü ue
    ß sz

    davon mal ganz abgesehen: am besten beschraenkst du dich auf reines ascii in deinem code, das kann jeder anzeigen 🙂



  • J.P.Pfannmöller schrieb:

    Ich glaube du hast recht, wenn ich locale in die Bash eingeben erhalte ich folgende Ausgabe:

    LANG=en_US.UTF-8
    LC_CTYPE="en_US.UTF-8"
    LC_NUMERIC="en_US.UTF-8"
    LC_TIME="en_US.UTF-8"
    LC_COLLATE="en_US.UTF-8"
    LC_MONETARY="en_US.UTF-8"
    LC_MESSAGES="en_US.UTF-8"
    LC_PAPER="en_US.UTF-8"
    LC_NAME="en_US.UTF-8"
    LC_ADDRESS="en_US.UTF-8"
    LC_TELEPHONE="en_US.UTF-8"
    LC_MEASUREMENT="en_US.UTF-8"
    LC_IDENTIFICATION="en_US.UTF-8"
    LC_ALL=

    Alles ist auf US eingestellt!!! Mein System läuft auch auf englisch!!! Wahrscheinlich liegt es daran.

    liegt eher an UTF-8. Ich habe ebenfalls alles auf englisch, und habe solche Probleme nicht (benutze kein UTF-8 bei der Speicherung von Text Dateien, sondern iso-8859-15)



  • utf-8 ist aber garkeine schlechte idee, weil

    http://en.wikipedia.org/wiki/ISO/IEC_8859-1 schrieb:

    In June 2004, the ISO/IEC working group responsible for maintaining eight-bit coded character sets disbanded and ceased all maintenance of ISO 8859, including ISO 8859-1, in order to concentrate on the Universal Character Set and Unicode. In computing applications, encodings that provide full UCS support (such as UTF-8 and UTF-16) are finding increasing favor over encodings based on ISO 8859-1.


Anmelden zum Antworten