Come posso stampare i valori wchar_t per consolare?
-
21-09-2019 - |
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?
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++;
}