it-swarm.com.de

Wie kann ich die wchar_t-Werte auf die Konsole drucken?

Beispiel:

#include <iostream>

using namespace std;

int main()
{
    wchar_t en[] = L"Hello";
    wchar_t ru[] = L"Привет"; //Russian language
    cout << ru
         << endl
         << en;
    return 0;
}

Dieser Code druckt nur HEX-Werte wie Adresse . Wie drucke ich die Zeichenfolge wchar_t?

61
zed91

Bearbeiten: Dies funktioniert nicht, wenn Sie versuchen, Text zu schreiben, der nicht in Ihrem Standardgebietsschema dargestellt werden kann. :-(

Verwenden Sie std::wcout anstelle von std::cout.

wcout << ru << endl << en;
73
Nate

Kann ich std::wcout vorschlagen?

Also so etwas:

std::cout << "ASCII and ANSI" << std::endl;
std::wcout << L"INSERT MULTIBYTE WCHAR* HERE" << std::endl;

Weitere Informationen finden Sie in einer verwandten Frage hier .

13
Konrad

Sie können ein normales Zeichen-Array verwenden, das tatsächlich mit utf-8-Zeichen gefüllt ist. Dies sollte das Mischen von Zeichen über Sprachen hinweg ermöglichen.

0
Michael Speer

Windows hat die sehr verwirrenden Informationen. Sie sollten das C/C++ - Konzept von Unix/Linux lernen, bevor Sie unter Windows programmieren.

wchar_t speichert Zeichen in UTF-16, einer festen 16-Bit-Speichergröße, die als Wide-Zeichen bezeichnet wird, aber wprintf () oder wcout () werden nicht-englische Zeichen niemals korrekt drucken, da in UTF-16 keine Konsole ausgegeben wird. Windows wird in der aktuellen Ländereinstellung ausgegeben, während Unix/Linux in UTF-8 ausgegeben wird. Alle sind Multibyte. Sie müssen also breite Zeichen vor dem Drucken in Multibyte konvertieren. Der Unix-Befehl wcstombs () funktioniert nicht unter Windows, verwenden Sie stattdessen WideCharToMultiByte (). 

Zuerst müssen Sie die Datei mit dem Editor oder einem anderen Editor in UTF-8 konvertieren. Installieren Sie dann die Schriftart in der Eingabeaufforderungskonsole, damit sie in Ihrer Sprache lesen/schreiben und die Codepage in der Konsole in UTF-8 ändern kann, um sie korrekt anzuzeigen. Geben Sie dazu den Befehl "chcp 65001" ein, während cygwin bereits UTF-8 verwendet. Hier ist was ich auf Thai gemacht habe.

#include <windows.h>
#include <stdio.h>

int main()
{
    wchar_t* in=L"ทดสอบ"; // thai language
    char* out=(char *)malloc(15);
    WideCharToMultiByte(874, 0, in, 15, out, 15, NULL, NULL);
    printf(out); // result is correctly in Thai although not neat
}

Beachten Sie, dass 874 = (thailändische) Codepage im Betriebssystem, 15 = Zeichenfolge

Mein Vorschlag ist es zu vermeiden, nicht englische Zeichen auf die Konsole zu drucken, es sei denn, dies ist nicht einfach.

0
Ray Chakrit

Sie können breite Zeichen mit wprintf drucken.

#include <iostream>

int main()
{
    wchar_t en[] = L"Hello";
    wchar_t ru[] = L"Привет"; //Russian language
    wprintf(en);
    wprintf(ru);
    return 0;
}

Ausgabe:

Hallo
Привет

#include <iostream>
using namespace std;
void main()
{
setlocale(LC_ALL, "Russian");
cout << "\tДОБРО ПОЖАЛОВАТЬ В КИНО!\n";
}
0
Max Barannyk