2012-01-09 13 views
37

Ben kodu vardı:Std :: wstring nasıl başlatılır ve yazdırılır?

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

ve bu iyi çalıştı. Ama şimdi takımım wstring'a geçmek istiyor. Yani Denedim:

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

ama bu bana bir derleme hata verdi: Ben olarak tanımlamak gerektiğini okumak web arama yaptıktan sonra

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

:

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

bu derlenmiş ama "SomeText" yerine "0000000000" yazdırır.

Neyi yanlış yapıyorum?

+0

yoğun bakım unicode kütüphanesi kullanmayı düşünün - [link] (http://icu-project.org/apiref/icu4c/index.html). Unicode'u destekler ve birçok kullanışlı özelliğe sahiptir. özellikle bu dizeleri değiştirmek istiyorsanız. – WeaselFox

+0

@Weasel: Neden dünyada Unicode dizeleriyle çalışmak için ayrı bir kütüphaneye ihtiyacınız olacak? –

+0

deneyimlerimden, wchar dizelerini (arama, değiştirme vb.) Veya diğer çoklu bayt dizilerini işlemek için ayrı bir kitaplık kullanmak daha iyidir. – WeaselFox

cevap

65

Bir wstring görüntülemek için ayrıca geniş bir cout - wcout sürümüne ihtiyacınız vardır.

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

Kullanım std::wcout yerine std::cout.

5

std::wcout<<st numaralı telefonu kullanmayı deneyin.

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

Bu yanıt, "C++/CLI" etiketi ve ilgili Windows C++ konsoluna uygulanır. std :: wstring çoklu bayt karakter var ise

, iki nokta daha çalışması için yapılması gereken:


  1. #include <io.h>
    #include <fcntl.h>
  2. Seti stdout'u başlıkları ekleyin modu

Sonuç: Multi-bytes console