2012-01-09 41 views
37

私はコードを持っていた:std :: wstringの初期化と印刷方法は?

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

をし、それがうまく働きました。でも今私のチームはwstringに移動したいと思っています。 は、だから私が試した:

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

が、これは私のコンパイルエラー与えた:私は私のようにそれを定義すべきであることを読んでウェブを検索した後

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; 

これはコンパイルが、 "SomeText"の代わりに"0000000000"を印刷します。

私は間違っていますか?

+0

はICUのUnicodeのライブラリを使用することを検討してください - [リンク](http://icu-project.org/apiref/icu4c/index.html)。これは、ユニコードをサポートし、多くの便利な機能を備えています。特にそれらの文字列を操作したい場合に便利です。 – WeaselFox

+0

@Weasel:なぜUnicode文字列を扱うには別のライブラリが必要でしょうか? –

+0

私の経験から、別のライブラリを使ってwchar文字列(検索、置換など)やその他のマルチバイト文字列を操作するほうがはるかに優れています。 – WeaselFox

答えて

65

wstringを表示するには、ワイドバージョンのcout-wcoutも必要です。

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

利用std::wcoutの代わりstd::cout

5

使用してください。std::wcout<<stあなたの問題を解決します。

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

この回答は、「C++/CLI」タグおよび関連するWindows C++コンソールに適用されます。あなたがのstd :: wstringのマルチバイト文字を持っている場合

、さらに2つの事はそれを動作させるために行われる必要があります。


  1. #include <io.h>
    #include <fcntl.h>
  2. セット標準出力ヘッダを含めますモード
    _setmode(_fileno(stdout), _O_U16TEXT)

結果: Multi-bytes console

関連する問題