Exemple:
#include <iostream>
using namespace std;
int main()
{
wchar_t en[] = L"Hello";
wchar_t ru[] = L"Привет"; //Russian language
cout << ru
<< endl
<< en;
return 0;
}
Ce code n'imprime que les valeurs HEX telles que l'adresse ..____. Comment imprimer la chaîne wchar_t?
Modifier: cela ne fonctionne pas si vous essayez d’écrire du texte qui ne peut pas être représenté dans vos paramètres régionaux par défaut. :-(
Utilisez std::wcout
au lieu de std::cout
.
wcout << ru << endl << en;
Puis-je suggérer std::wcout
?
Donc, quelque chose comme ça:
std::cout << "ASCII and ANSI" << std::endl;
std::wcout << L"INSERT MULTIBYTE WCHAR* HERE" << std::endl;
Vous trouverez peut-être plus d'informations dans une question connexe ici .
Vous pouvez utiliser un tableau de caractères normal qui est en fait rempli de caractères utf-8. Cela devrait permettre de mélanger des caractères à travers les langues.
Windows a l'information très déroutante. Vous devriez apprendre le concept C/C++ sous Unix/Linux avant de programmer sous Windows.
wchar_t stocke le caractère dans UTF-16, qui est une taille de mémoire fixe de 16 bits appelée caractère large, mais wprintf () ou wcout () n'imprimera jamais correctement les caractères larges autres qu'anglais, car aucune console ne générera en UTF-16. Windows produira dans les paramètres régionaux actuels tandis que unix/linux produira dans UTF-8, tous en multi-octets. Vous devez donc convertir les caractères larges en multi-octets avant l'impression. La commande unix, wcstombs () ne fonctionne pas sous Windows, utilisez plutôt WideCharToMultiByte ().
Vous devez d’abord convertir le fichier en UTF-8 en utilisant le bloc-notes ou un autre éditeur. Ensuite, installez la police dans la commande Invite de manière à ce qu’elle puisse lire/écrire dans votre langue et changer la page de code de la console en UTF-8 pour s’afficher correctement en tapant la commande Invite "chcp 65001" alors que cygwin est déjà défini par défaut sur UTF-8. Voici ce que j'ai fait en thaï.
#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
}
Notez que 874 = page de code (thaï) dans le système d’exploitation, 15 = taille de la chaîne
Ma suggestion est d'éviter d'imprimer des caractères larges non anglais sur la console sauf si cela est nécessaire car ce n'est pas facile.
Vous pouvez imprimer des caractères larges avec wprintf
.
#include <iostream>
int main()
{
wchar_t en[] = L"Hello";
wchar_t ru[] = L"Привет"; //Russian language
wprintf(en);
wprintf(ru);
return 0;
}
Sortie:
Bonjour
Привет
#include <iostream>
using namespace std;
void main()
{
setlocale(LC_ALL, "Russian");
cout << "\tДОБРО ПОЖАЛОВАТЬ В КИНО!\n";
}