web-dev-qa-db-fra.com

Comment puis-je imprimer les valeurs de wchar_t sur la console?

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?

61
zed91

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;
73
Nate

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 .

13
Konrad

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.

0
Michael Speer

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.

0
Ray Chakrit

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
Привет

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