Umlaute mit getchar()
-
Hi,
ich möchte mit folgendem Code Umlaute einlesen und umwandeln:
int main() { int c; while((c=getchar()) != EOF) { switch(c) { case 0x84: // 0x84 = ä putchar('a'); putchar('e'); break; case 0x94: // .. ö putchar('o'); putchar('e'); break; case 0x81: // ü putchar('u'); putchar('e'); break; case 0xE1: // ß putchar('s'); putchar('s'); break; default: putchar(c); } } return 0; }
Allerdings klappt das nicht... Die Ausgabe macht keinen Mucks bei den Umlauten.
Lediglich bei der Eingabe "Ä" (großes! A Umlaut) wird ein "?e" ausgegebenKann es sein dass der ASCII Zeichensatz unter Linux ein anderer ist, oder das Terminal überhaupt nicht mit den Umlauten zurecht kommt?
-
muß man da nicht ne locale setzen also
setlocale(LC_ALL,"de_DE")
oder so
lg lolo
-
ASCII kennt keine Umlaute! Wenn dein System UTF-8 benutzt, dann sind Umlaute und andere nicht ASCII Zeichen länger als ein Zeichen. Du musst also überprüfen ob getchar dir den Anfang einer UTF-8 Sequenz liefert. Siehe http://en.wikipedia.org/wiki/UTF-8
-
Hallo,
einsdurchnull schrieb:
Hi,
ich möchte mit folgendem Code Umlaute einlesen und umwandeln:
...
Kann es sein dass der ASCII Zeichensatz unter Linux ein anderer ist, oder das Terminal überhaupt nicht mit den Umlauten zurecht kommt?Wieso? Die Linjuxkonsole kann doch Umlaute darstellen, das kann sogar die von Windows!
Gruß,
B.B.
-
einsdurchnull schrieb:
Kann es sein dass der ASCII Zeichensatz unter Linux ein anderer ist, oder das Terminal überhaupt nicht mit den Umlauten zurecht kommt?
Es ist alles nur die Frage der verwendeten Kodierung und welche Kodierung der Terminal darstellen kann. GNU/Linux hat schon seit vielen Jahren guten UTF-8 Support und die meisten Distributionen verwenden (ebenfalls seit Jahren) UTF-8 standardmäßig. Ich empfehle das hier zu lesen: http://joelonsoftware.com/articles/Unicode.html
finde ganz gut gelungen um einen groben Überblick zu bekommen.
-
Jetzt bin ich hinreichend aufgeklärt..
.. die Umlaute belegen 2 Byte, also eine UTF-8 Sequenz.
Also kann ich getchar() wegwerfen.Ich werd die Umlaute mit Hilfe von getwchar() einlesen.
Danke für die Antworten und den Artikel!