Umlaute unter Windows zu Grossbuchstaben umwandeln?
-
Hi!
ich habe versucht, mit towctrans in einem deutschen Text auch Umlaute wie ä und ö unter Windows in upper case umzuwandeln. Das Programm klappt unter Linux mit der setlocale(LC_CTYPE,"de_DE.UTF-8").
Wenn ich aber unter Windows setlocale(LC_CTYPE,"German_Germany.1252") angebe, bleiben die Buchstaben ä und ö stehen, es unterstützt irgendwie Unicode nicht. de_DE.UTF-8 kennt Windows als locale überhaupt nicht. Auch der normale Befehl toupper() funktioniert nicht. Gibt es eine Möglichkeit, deutsche Umlaute unter Windows mit einem ANSI C-Programm groß- bzw. kleinzuschreiben?Vielen Dank & Gruß
jesse
-
Die Datei in ein char-array einlesen, nach dem entsprechenden Code suchen, ersetzen.
-
Das ist natürlich die sicherste Methode. Aber gibt es nicht eine locale in Windows für UTF-8? 65001 funktioniert auch nicht. Default ist German_Germany.1252. Unter Linux funktioniert UTF-8.
-
Wozu benutzt Du towctrans?
_strupr /_strlwr
mit
setlocale(LC_CTYPE,"German_Germany.1252");
wandelt Dir die Umlaute ohne Probleme.
Gibt es einen Grund warum Du nicht
setlocale(LC_All,"German");
nutzt?
-
Thuruks Methode ist nicht sicher.
Die Ersetzung hängt von der verwendeten Codepage ab und das kann schief gehen.
-
Zu UTF-8 meint die MSDN
The set of available languages, country/region codes, and code pages includes all those supported by the Win32 NLS API except code pages that require more than two bytes per character, such as UTF-7 and UTF-8. If you provide a code page like UTF-7 or UTF-8, setlocale will fail, returning NULL. The set of language and country/region codes supported by setlocale is listed in Language and Country/Region Strings.
Der Link dazu:
http://msdn.microsoft.com/de-de/library/x99tb11d.aspxRuft man setlocale mit
setlocale(LA_ALL,"")
auf, wird die Codepage des Betriebssystems genutzt das sollte bei Windows UTF-8 sein.
-
Schau dir vielleicht mal libunistring an. Das ist eine vollständige Unicode-Implementierung. Damit kannst du das richtige Casemapping auch ohne locales machen. (Siehe u8_toupper)