PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : tolower() Umlaute



Dirk Beckers
09-03-2005, 00:57
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! :confused:

Gruß
Dirk

locus vivendi
09-03-2005, 14:50
Ja, hier(GNU/linux, glibc 2.3.x) funktionierts.

Ausschnittsweise:


...
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>('Ö')) );
...

Dirk Beckers
11-03-2005, 17:00
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

Joghurt
11-03-2005, 18:42
#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?

locus vivendi
12-03-2005, 09:58
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?

Dirk Beckers
18-03-2005, 00:29
#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

Joghurt
18-03-2005, 01:50
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!

Dirk Beckers
18-03-2005, 08:59
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