Unicode geht nicht
-
Ich versuche gerade ein C Programm zu schreiben und dabei die Unicode bzw. W Funktionen von Windows mit dem GCC zu nutzen:
#include <stdio.h> #include <tchar.h> #define UNICODE int _tmain(){ printf("Dies ist ein Test mit vielen Umlauten: ÖÄÜöäüß²³@€.\n"); return 0; }Nur funktioniert das irgendwie nicht.
Die Umlaute werden nie korrekt ausgegeben.
Woran liegt das?Ein
#define _UNICODEhabe ich auch schon probiert, aber daran lag es auch nicht.
Und wmain() geht mit dem gcc nicht, aber das will ich so direkt auch nicht nutzen.
Oder liegt der Fehler vielleicht daran,
daß der GCC keine UTF-8 *.C Dateien versteht?
Mein Editor legt nämlich nur UTF-8 Dateien an, das habe ich so bewußt eingestellt.Darum geht es mir:
http://www.coderjoe.net/archive/2007/04/18/wmain-vs-_tmain/Ich wollte das mal mit und mal ohne Unicode machen.
Aber leider funktioniert es nicht, es ist immer normales ANSI ASCII.
-
Unicode Problem schrieb:
Oder liegt der Fehler vielleicht daran,
daß der GCC keine UTF-8 *.C Dateien versteht?
Mein Editor legt nämlich nur UTF-8 Dateien an, das habe ich so bewußt eingestellt.Dem Compiler ist es völlig egal, wie du deine nicht-ASCII-Zeichen codierst. Die Frage ist, ob die Konsole, in der du das Programm ausführst, davon ausgeht, dass Strings als UTF-8 codiert sind.
-
MFK schrieb:
Unicode Problem schrieb:
Oder liegt der Fehler vielleicht daran,
daß der GCC keine UTF-8 *.C Dateien versteht?
Mein Editor legt nämlich nur UTF-8 Dateien an, das habe ich so bewußt eingestellt.Dem Compiler ist es völlig egal, wie du deine nicht-ASCII-Zeichen codierst. Die Frage ist, ob die Konsole, in der du das Programm ausführst, davon ausgeht, dass Strings als UTF-8 codiert sind.
Heißt das, daß die Eingabeauforderung von Windows kein UTF-8 kann?
Und wenn ja, wie kann ich dann meinen Code testen?
Das ganze in ein Windows Fenster packen?
-
Dieser Thread wurde von Moderator/in rüdiger aus dem Forum ANSI C in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Selbst wenn die Konsole Unicode könnte würde das nicht Funktionieren
Wenn du Unicode nutzen willst musst du auch die entsprechenden Funktionen nutzen.
Strings so: _T("ching chang schong")
Funtionen so: tprintf(...);
Auch wichtig ist die Schriftart.UTF8 kapiert Windows eh nicht du musst 2 Byte Charakter verwenden und diese generischen Makros ermöglichen dir das so das du auch wieder auf 1 Byte Charakter umsteigen kannst.
Aber dazu gibt es schon einige Threads hier im Forum...
Wenn du tatsächlich eine Konsole hast die UTF8 kann dann sollte es nach folgenden Aufrufen Funktionieren:
locale l("de_DE.UTF-8");
wcin.imbue(l);
wcout.imbue(l);
locale::global(l);
-
-
DaRpH schrieb:
Selbst wenn die Konsole Unicode könnte würde das nicht Funktionieren
Wenn du Unicode nutzen willst musst du auch die entsprechenden Funktionen nutzen.
Strings so: _T("ching chang schong")
Funtionen so: tprintf(...);
Auch wichtig ist die Schriftart.Ich dachte genau deswegen hat man dieses Zeug mit _tmain und den Headerdateien
tchar.h eingeführt?Die Sorgen nämlich mit Define Anweisungen dafür, daß die Funktionsnamen wie z.B. printf dann auf die entsprechenden ASCII oder Unicode Versionnen umgeleitet werden.
Der Compilter müßte also bei definiertem UNICODE aus einem printf automatisch ein wprintf machen.
So habe ich das verstanden.http://www.koders.com/c/fidC920B03557EFCAA1D3C700F25F1CAAF6ADFE9BB8.aspx
Wenn du tatsächlich eine Konsole hast die UTF8 kann dann sollte es nach folgenden Aufrufen Funktionieren:
locale l("de_DE.UTF-8");
wcin.imbue(l);
wcout.imbue(l);
locale::global(l);Werde ich mal testen. thx.
-
Jochen Kalmbach schrieb:
Ok, aber das ist jetzt alles Compilerspezifisch.
Gibt es keine Lösung, damit das Plattform- und Compilerunabhängiger Code werden kann?