Ich habe Microsoft Visual Studio 2010 auf Windows 7 64bit. (In Projekteigenschaften „Zeichensatz“ auf „nicht festgelegt“, aber jede Einstellung zu gleicher Leistung führt.)Erklärung benötigt für eine UTF-8 vs cpp Fall
Quellcode:
using namespace std;
char const charTest[] = "árvíztűrő tükörfúrógép ÁRVÍZTŰRŐ TÜKÖRFÚRÓGÉP\n";
cout << charTest;
printf(charTest);
if(set_codepage()) // SetConsoleOutputCP(CP_UTF8); // *1
cerr << "DEBUG: set_codepage(): OK" << endl;
else
cerr << "DEBUG: set_codepage(): FAIL" << endl;
cout << charTest;
printf(charTest);
* 1: Einschließlich windows.h
vermasseln Dinge, so dass ich Ich nehme es aus einer separaten cpp.
Die kompilierte Binärdatei enthält die Zeichenfolge als korrekte UTF-8-Bytefolge. Wenn ich die Konsole mit chcp 65001
auf UTF-8 setze und type main.cpp
ausstelle, wird die Zeichenfolge korrekt angezeigt.
Test (Konsole eingestellt Lucida Console Schriftart verwenden):
D:\dev\user\geometry\Debug>chcp
Active code page: 852
D:\dev\user\geometry\Debug>listProcessing.exe
├írv├şzt┼▒r┼Ĺ t├╝k├Ârf├║r├│g├ęp ├üRV├ŹZT┼░R┼É T├ťK├ľRF├ÜR├ôG├ëP
├írv├şzt┼▒r┼Ĺ t├╝k├Ârf├║r├│g├ęp ├üRV├ŹZT┼░R┼É T├ťK├ľRF├ÜR├ôG├ëP
DEBUG: set_codepage(): OK
��rv��zt��r�� t��k��rf��r��g��p ��RV��ZT��R�� T��K��RF��R��G��P
árvíztűrő tükörfúrógép ÁRVÍZTŰRŐ TÜKÖRFÚRÓGÉP
Was ist die Erklärung dahinter? Kann ich irgendwie fragen cout
als printf
arbeiten?
ATTACHMENT
Viele sagen, dass Windows-Konsole nicht UTF-8-Zeichen überhaupt nicht unterstützt. Ich bin ein ungarischer Mann in Ungarn, mein Windows auf Englisch eingestellt ist (mit Ausnahme von Datumsformaten, werden sie auf Ungarisch festgelegt) und kyrillische Buchstaben sind noch richtig neben ungarischen Buchstaben angezeigt:
(Meine Standardkonsole Codepage ist CP852)
mögliche Duplikat von [Wie schreibe ich eine std :: Codecvt Facette?] (http: // stackoverflow.com/questions/ 2971386/how-do-ich-schreibe-a-stdcodecvt-facette) –
@HansPassant Ich glaube nicht, dass es das gleiche ist. Es scheint verwandt zu sein, erklärt aber nicht explizit den Unterschied zwischen "cout" und "printf". Und sollte ich auch eine 'Codecvt'-Facette schreiben, um' Cout' zu sagen, nichts zu konvertieren? Es sollte einen einfacheren Weg geben, hoffe ich ... – Notinlist