2010-03-22 28 views
47

Ejemplo:¿Cómo puedo imprimir los valores de wchar_t en la consola?

#include <iostream> 

using namespace std; 

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

Este código sólo impresiones de valores hexadecimales como dirección. Cómo imprimir la cadena wchar_t?

+0

El ver y la primera pregunta relacionada es http://stackoverflow.com/questions/1625531/c-wchar-to-stdcout-and-comparision –

+0

¿En qué sistema operativo y qué aplicación de consola usa? Algunas consolas no son compatibles con Unicode. –

+0

Windows 7. Compilador MSVS2008 – zed91

Respuesta

53

Editar: Esto no funciona si está intentando escribir texto que no se puede representar en su configuración regional predeterminada. :-(

Uso std::wcout en lugar de std::cout.

wcout << ru << endl << en; 
+3

Imprime solo cadenas en inglés. ¿Qué hay del ruso? – zed91

+8

La consola no estará habilitada para Unicode. La redirección de salida es el hangup, que está atascado en el legado de char de 8 bits. Solo puede mostrar el texto correcto en una máquina rusa con la fuente de consola correcta cargada. –

+0

Tenga en cuenta que si intenta esto para imprimir en una consola Linux es probable que termine con caracteres ilegibles ya que la mayoría de los sistemas Linux no usan la codificación utf16. –

9

¿Puedo sugerir std::wcout?

Por lo tanto, algo como esto:

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

Usted puede encontrar más información en una pregunta relacionada here.

+0

Comprueba si esto funciona con el idioma ruso (cópialo). Para mí no es así –

+0

Mira este hilo sobre cómo mezclar los defectos de 'cout' y' wcout'. https://stackoverflow.com/questions/8947949/mixing-cout-and-wcout-in-same-program –

0

Usted podría utilizar el uso de una matriz de caracteres normal que en realidad está lleno de caracteres UTF-8. Esto debería permitir la mezcla personajes en diferentes idiomas.

-3

no estamos buscando la manera fácil!

int i = 0; 
while (ru[i]) { 
    std::cout << (char)ru[i]; 
    i++; 
} 
+1

¿Puedes explicar algo más que eso? –

+2

Si esto funcionó, no habría motivo para caracteres anchos ... – opetroch

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

Puede mejorar esta respuesta proporcionando una explicación para que coincida con su código. –

+0

¡Bienvenido a Stack Overflow! Aunque este código puede ayudar a resolver el problema, no explica "por qué" y/o "cómo" responde la pregunta. Proporcionar este contexto adicional mejoraría significativamente su valor a largo plazo. Por favor [edite] su respuesta para agregar una explicación, incluyendo qué limitaciones y suposiciones se aplican. –

Cuestiones relacionadas