2016-11-24 19 views
-1

私はwin32アプリケーションでやっていて、ユニコードのテキスト入力を受け付けるエディットコントロールを持っています。私はstd::stringにテキストを取得するには、次のコードを使用します。WCHAR配列をunicodeのstd :: stringに変換するには?

WCHAR out[50] = {}; 
GetDlgItemTextW(hwnd, ID_Edit, out, 50); 
wstring myWString(out); 
string myString(ws.begin(), ws.end()); 

dubuggerでは、私は、入力がUnicodeテキストですが、myStringがcurruptedされたときmyWStringは大丈夫であることがわかります。

どうすれば正しく変換できますか?

はEDIT:

OK、というしstringとだまし、私の代わりにwstringを使用しています。 しかし、別の問題が生じる:

私は今wstringwcinwcout休憩、consleにユーザー入力を取得するには、非ASCIIテキスト入力をstringcoutcinを使用していた別のコードを持っており、うち一部を入れて...

私のコードについては

それはだった:

に変更
string myString; 
//... 
cin >> myString; 
//... 
cout << myString; 

wstring myString; 
//... 
wcin >> myString; 
//... 
wcout << myString; 

ユーザーが非ASCII文字を使用すると、入力テキストと出力テキストが壊れます。

+0

はなぜあなたが最初の場所で変換したいのですか?国際化されたASCII以外のテキストで作業する必要がある場合は、 'wstring'を使用してください。 –

+3

WideCharToMultiByte API – Asesh

+0

を使用することができます。この質問は、送信元と宛先のエンコーディングを知らなくても広すぎます。 – MrEricSir

答えて

0

OK、私は最終的に、ユニコード問題なしで一緒にcinとwstringを一緒に使用することができます。 私は行を追加します

setlocale(LC_ALL, ""); 
ios_base::sync_with_stdio(false); 
wcin.imbue(locale("")); 
wcout.imbue(locale("")); 

をとのwciNは今良いです:

wstring myString; 
getline(wcin, myString); 
//... 
wcin >> myString; 
//... 
wcout << myString; 
関連する問題