Domanda

Esempio:

#include <iostream>

using namespace std;

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

Questo codice stampa solo HEX-valori come indirizzo. Come stampare la stringa wchar_t?

È stato utile?

Soluzione

Edit: Questo non funziona se si sta cercando di scrivere un testo che non può essere rappresentato nel vostro locale di default. : - (

Usa std::wcout invece di std::cout.

wcout << ru << endl << en;

Altri suggerimenti

Posso suggeriscono std::wcout?

Quindi, qualcosa di simile a questo:

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

Si può trovare maggiori informazioni in una questione correlata qui .

Si potrebbe utilizzare utilizzare un normale array di caratteri che è in realtà piena di caratteri UTF-8. Ciò dovrebbe consentire la miscelazione caratteri tra le varie lingue.

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

Windows ha delle informazioni molto confusa. Si dovrebbe imparare concetto di C / C ++ da Unix / Linux prima della programmazione in Windows.

wchar_t negozi carattere in UTF-16, che è una dimensione della memoria a 16 bit fisso chiamato carattere largo ma wprintf () o wcout () non sarà mai la stampa non-inglese caratteri estesi correttamente perché nessuno console di output sarà in UTF-16. Di Windows sarà in uscita nel locale corrente mentre l'uscita UNIX / Linux in UTF-8, tutti sono multi-byte. Quindi, è necessario convertire i caratteri di larghezza di multi-byte prima della stampa. I wcstombs comando Unix () non funziona su Windows, utilizzare WideCharToMultiByte (), invece.

In primo luogo è necessario convertire il file in UTF-8 utilizzando blocco note o un altro editor. Quindi installare font nel comando console pronta in modo che possa leggere / scrivere nella tua lingua e cambiare pagina di codice in console per UTF-8 per visualizzare correttamente digitando nel prompt dei comandi "chcp 65001", mentre Cygwin è già predefinito in UTF-8. Ecco quello che ho fatto in tailandese.

#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
}

Si noti che 874 = (Thai) pagina di codice nel sistema operativo, 15 = dimensione della stringa

Il mio suggerimento è quello di evitare la stampa di caratteri estesi non inglesi per consolare se non necessario perché non è facile.

È possibile stampare caratteri estesi con wprintf .

#include <iostream>

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

Output:

  

Ciao
  Привет

non siamo alla ricerca di modi semplici!

int i = 0;
while (ru[i]) {
   std::cout << (char)ru[i];
   i++;
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top