Anzeige:
Ergebnis 1 bis 8 von 8

Thema: tolower() Umlaute

  1. #1
    Dirk Beckers
    Gast

    tolower() Umlaute

    Hat es schon mal jemand geschafft (und wie), mit setlocale() und tolower() unter Linux/ANSI-C deutsche Umlaute von Groß- in Kleinschreibung zu wandeln? Alle meine Versuche mit den unterschiedlichsten Locale-Settings waren ohne Ergebnis!

    Gruß
    Dirk

  2. #2
    Registrierter Benutzer
    Registriert seit
    23.05.2004
    Beiträge
    592
    Ja, hier(GNU/linux, glibc 2.3.x) funktionierts.

    Ausschnittsweise:
    Code:
    ...
    if(!setlocale(LC_ALL, "de_DE") )
    	{
    	std::cout << "\nCould not set locale!\n";
    	}
    else
           {
           std::cout << "\nislower(static_cast<unsigned char>('ö') ) = " << islower(static_cast<unsigned char>('ö') );
    std::cout << "\nstatic_cast<unsigned char>(tolower(static_cast<char>('Ö')) ) = " 
              << static_cast<char>(tolower(static_cast<unsigned char>('Ö')) );
    ...

  3. #3
    Dirk Beckers
    Gast
    Ich weiß, für C++ geht das, offensichtlich sind die Klassen in der glibc sauber implementiert...

    Ich meinte aber Standard-C - da gehts nämlich bei mir nicht!

    Trotzdem danke.

    Gruß
    Dirk

  4. #4
    Registrierter Benutzer
    Registriert seit
    25.10.2004
    Beiträge
    819
    Code:
    #include <locale.h>
    int main()
    {
       setlocale(LC_CTYPE,"de_DE");
       printf("%c\n", tolower('Ä'));
    }
    funktioniert hier einwandfrei (auch mit LC_ALL). Testest du die C und C++-Programme auf dem selben System?

  5. #5
    Registrierter Benutzer
    Registriert seit
    23.05.2004
    Beiträge
    592
    Also ob man die Funktionen der C-Bibliothek nun von C oder C++ aus aufruft, dürfte eigentlich keinen größeren Unterschied machen. Falls es dich beruhigt (oder eher beunruhigt?), ich kann bestätigen das es bei mir auch mit "purem" C funktioniert. Kann es vielleicht sein das bei dir keine deutschen Locales installiert sind?

  6. #6
    Dirk Beckers
    Gast
    Zitat Zitat von Joghurt
    Code:
    #include <locale.h>
    int main()
    {
       setlocale(LC_CTYPE,"de_DE");
       printf("%c\n", tolower('Ä'));
    }
    funktioniert hier einwandfrei (auch mit LC_ALL). Testest du die C und C++-Programme auf dem selben System?
    Dieses Stück Source läuft eben genau NICHT bei mir! Genau so hatte ich es schon versucht! Der Compile bringt schon die Warning 'Zeichenkonstante mit mehreren Zeichen' - damit meint er das Ä. Und dann wird nichts ausgegeben.

    Hm, ob die Locales bei mir installiert sind? Öhm, da bin ich jetzt auf dem falschen Fuß erwischt, keine Ahnung ob und auch keine Ahnung, wie ich das prüfe. Ich werde googeln...

    Auf jeden Fall schon mal vielen Dank!

    Gruß
    Dirk

  7. #7
    Registrierter Benutzer
    Registriert seit
    25.10.2004
    Beiträge
    819
    Zitat Zitat von Dirk Beckers
    Der Compile bringt schon die Warning 'Zeichenkonstante mit mehreren Zeichen' - damit meint er das Ä.
    Dann speichert dein Editor die Datei im UTF-8 Format und nicht in ISO8891 ab!

  8. #8
    Dirk Beckers
    Gast
    Das war ne Geburt... Ich muss also $LANG auf 'de_DE' setzen und zusätzlich noch die Einstellungen des Konsole-Fensters (KDE) so abändern, daß als Encoding ISO8859-1 verwendet wird. Dann geht es.

    Aber irgendwie kann es das ja nicht sein. Strange.

    Danke auf jeden Fall!

    Dirk

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •