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?
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;
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 .
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.
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.
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";
}