MSVC 2008: ü mit wcout
-
Hallo
bei wcout << L"ü" gibt das Programm, welches mit MSVC2008 kompiliert wurde, nur müll aus (statt dem ü eine hochgestellte drei). Wie kann ich das ändern?
-
1. Ist die Konsole Unicodefähig? Wahrscheinlich nicht!
2. Gibt man nicht ü in seinen Sourcecode ein, sondern den Unicode-Code. In dem Fall 00FC. Also:wcout << L"\u00FC";
-
1. Die Konsole ist unicodefähig - wenn ich die pause.exe Applikation ausführe, wird das ü wunderbar angezeigt.
2. Funktioniert leider auch nicht - gleicher effekt. Statt ü hochgestellte drei.
-
cmd.exe ist NICHT Unicode fähig, sondern benutzt die lokale codepage (z.B. windows-1252).
Aber es gibt Unicode-fähihge Terminals für Windows. z.b. http://sources-redhat.oc1.mirrors.redwire.net/cygwin/release/rxvt-unicode/BTW: Benutz lieber utf-8. Dann musst du dich nicht mit komplizierten utf-16-sequenzen rumschlagen. Also normale strings (ohne L) und cout verwernden und den Quellcode als utf-8 abspeichern.
-
dubadub schrieb:
1. Die Konsole ist unicodefähig - wenn ich die pause.exe Applikation ausführe, wird das ü wunderbar angezeigt.
2. Funktioniert leider auch nicht - gleicher effekt. Statt ü hochgestellte drei.1. Nein, das Ü deutet NICHT auf UNicode hin! ü gibts auch in anderen Codierungen!!!!
2. Natürlich funktioniert es nicht, weil die Konsole nicht Unicodefähig ist! Du mußt das Ü so kodieren, das für windows-1252 geht. Eine Codeübersicht mußt du aber selber mal im web suchen. das werde ich bestimmt nicht auch noch machen.
-
Kenner des Unicode schrieb:
cmd.exe ist NICHT Unicode fähig, sondern benutzt die lokale codepage (z.B. windows-1252).
Also meine ist es. Nur die meisten Programme sind es nicht!
Siehe: wprintf/wcout and unicode characters in VS2005
http://blog.kalmbachnet.de/?postid=98Natürlich darfst Du auch nicht vergessen einen Unicode-Font in der Console zu aktivieren. z.B. Lucida Console
-
Jochen Kalmbach schrieb:
Natürlich darfst Du auch nicht vergessen einen Unicode-Font in der Console zu aktivieren. z.B. Lucida Console
Wie geht das den?
-
In der Console im Menü rechts oebn auf "Eigenschaften|Schriftart", dann dort "Lucida Console" auswählen...
-
Gibt es da auch eine Möglichkeit, sowas aus meinem Program heraus zu machen?
-
Abfragen kann man es mit "GetCurrentConsoleFont".
Setzen kann man es offiziell erst ab Vista mit "SetCurrentConsoleFontEx"
-
mmmh, strange...
int main() { _setmode(_fileno(stdout), _O_U16TEXT); wcout << L"Hallo Weltü" << endl;Ergebnis:
test.exe has triggered a breakpoint
int __cdecl fputc ( int ch, FILE *str ) { int retval=0; _VALIDATE_RETURN((str != NULL), EINVAL, EOF); _lock_str(str); __try { _VALIDATE_STREAM_ANSI_SETRET(str, EINVAL, retval, EOF); if(retval==0) { retval = _putc_nolock(ch,str); } } __finally { _unlock_str(str); } return(retval); }innerhalb _VALIDATE_STREAM_ANSI_SETRET läuft wohl was schief

-
Keine Ahnung was Du machst, das geht bei mir aber problemlos:
#include <tchar.h> #include <fcntl.h> #include <io.h> #include <iostream> int _tmain() { _setmode(_fileno(stdout), _O_U16TEXT); std::wcout << L"Hallo Weltü" << std::endl; }mit VS2008
-
warum benutzt ihr nicht einfach utf-8?
#include<iostream> using namespace std; int main() { cout << "Hällö Wült!" << endl; }-> abspeichern als utf-8 -> kompilieren -> fertig.
oder unterstützt windows nur das alte utf-16?
-
WO verwendest Du hier UTF-8?
WIE wird der Text auf der Consoel ausgegeben?Dein Programm macht Folgende Ausgabe:
Hõll÷ W³lt!
-
Dieser Thread wurde von Moderator/in Jochen Kalmbach aus dem Forum Compiler- und IDE-Forum 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.
-
Jochen Kalmbach schrieb:
WO verwendest Du hier UTF-8?
WIE wird der Text auf der Consoel ausgegeben?Dein Programm macht Folgende Ausgabe:
Hõll÷ W³lt!Du hast vergessen das Terminal vorher auf UTF-8 zu stellen. Das macht man mit
chcp 65001
-
Und deshalb einfach in Unicode (TUF16) ausgeben dann muss Du an sowas gar nicht denken... auch funktionieren dann Deine ANSI Programm auch noch; was sie bei UTF8 nicht mehr tun...
-
Jochen Kalmbach schrieb:
Und deshalb einfach in Unicode (TUF16) ausgeben dann muss Du an sowas gar nicht denken... auch funktionieren dann Deine ANSI Programm auch noch; was sie bei UTF8 nicht mehr tun...
Hö?
War's nicht so, dass UTF-8 zu ASCII abwärts-kompatibel ist und nicht UTF-16?
-
Ich hatte auch nicht von ASCII sondern von ANSI gesprochen...
-
Jochen Kalmbach schrieb:
Ich hatte auch nicht von ASCII sondern von ANSI gesprochen...
ANSI ist eine amerikanische Institution für Standardisierungen...
Was meinst du?