2012-01-09 18 views
37

que tenían el código:¿Cómo inicializar e imprimir una std :: wstring?

std::string st = "SomeText"; 
... 
std::cout << st; 

y que funcionaba bien. Pero ahora mi equipo quiere pasar al wstring. así que he intentado:

std::wstring st = "SomeText"; 
... 
std::cout << st; 

pero esto me dio un error de compilación:

Error 1 error C2664: 'std::basic_string<_Elem,_Traits,_Ax>::basic_string(const std::basic_string<_Elem,_Traits,_Ax> &)' : cannot convert parameter 1 from 'const char [8]' to 'const std::basic_string<_Elem,_Traits,_Ax> &' D:...\TestModule1.cpp 28 1 TestModule1

Después de buscar en la web leí que debo definirlo como:

std::wstring st = L"SomeText"; // Notice the "L" 
... 
std::cout << st; 

este compilado, pero imprime "0000000000" en lugar de "SomeText".

¿Qué estoy haciendo mal?

+0

considerar el uso de la biblioteca UCI Unicode - [link] (http://icu-project.org/apiref/icu4c/index.html). Es compatible con Unicode y tiene muchas funciones útiles. especialmente si quieres manipular esas cadenas. – WeaselFox

+0

@Weasel: ¿Por qué en el mundo necesitarías una biblioteca separada para trabajar con cadenas Unicode? –

+0

desde mi experiencia, es mucho mejor usar una biblioteca separada para manipular cadenas wchar (buscar, reemplazar, etc.) u otras cadenas de bytes múltiples. – WeaselFox

Respuesta

65

Para mostrar un wstring también necesita una versión amplia de cout - wcout.

std::wstring st = L"SomeText"; 
... 
std::wcout << st; 
9

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

5

intente usar el uso std::wcout<<st que solucionará su problema.

std::wstring st = "SomeText"; 
... 
std::wcout << st; 
2

Responde a la etiqueta "C++/CLI" y a la consola de Windows C++ relacionada.

Si tiene caracteres de múltiples bytes en std :: wstring, dos cosas más hay que hacer para que funcione:

  1. incluir encabezados
    #include <io.h>
    #include <fcntl.h>
  2. Conjunto stdout modo
    _setmode(_fileno(stdout), _O_U16TEXT)

Resultado: Multi-bytes console

Cuestiones relacionadas