Comment puis-je imprimer les valeurs wchar_t à la console?
-
21-09-2019 - |
Question
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 imprime uniquement les valeurs HEX comme adresse. Comment imprimer la chaîne wchar_t?
La solution
Edit: Cela ne fonctionne pas si vous essayez d'écrire un texte qui ne peut pas être représenté dans votre langue par défaut. : - (
Utiliser std::wcout
au lieu de std::cout
.
wcout << ru << endl << en;
Autres conseils
Vous pouvez utiliser utiliser un tableau normal char qui est en réalité rempli de caractères UTF-8. Cela devrait permettre à des caractères de mélange entre les langues.
#include <iostream>
using namespace std;
void main()
{
setlocale(LC_ALL, "Russian");
cout << "\tДОБРО ПОЖАЛОВАТЬ В КИНО!\n";
}
Windows a des informations très déroutant. Vous devriez apprendre le concept de C / C de Unix / Linux avant la programmation sous Windows.
wchar_t magasins caractère UTF-16 qui est une taille de mémoire 16 bits fixe appelé caractère large mais wprintf () ou wcout () ne sera jamais imprimer des caractères larges non-anglais correctement car aucune console sortira en UTF-16. Windows affichera dans locale en cours tandis que la production de volonté unix / linux en UTF-8, tous sont multi-octets. Donc, vous devez convertir les caractères larges à plusieurs octets avant l'impression. Les wcstombs de commande unix () ne fonctionne pas sous Windows, utilisez WideCharToMultiByte () à la place.
D'abord, vous devez convertir le fichier en UTF-8 en utilisant le bloc-notes ou un autre éditeur. Ensuite, installez la police dans la console invite de commande afin de pouvoir lire / écrire dans votre langue et modifier la page de code dans la console en UTF-8 pour afficher correctement en tapant dans l'invite de commande « chcp 65001 », tandis que Cygwin est par défaut déjà en UTF-8. Voici ce que je l'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 = (Thai) page de code dans le système d'exploitation, 15 = taille de chaîne
Ma suggestion est d'éviter l'impression de caractères larges non anglais à la console à moins que nécessaire parce qu'il 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
Привет
nous ne cherchons pas des moyens faciles!
int i = 0;
while (ru[i]) {
std::cout << (char)ru[i];
i++;
}