2016-11-24 87 views
-1

我正在做一個win32應用程序,並有一個接受unicode文本輸入的編輯控件。我用下面的代碼來獲取文本到std::string在unicode中獲取WCHAR數組到std :: string?

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

在dubugger,我可以看到myWString是罰款時,輸入Unicode文本,但myString是currupted。

如何正確轉換它?

編輯:

確定,而不是用string嘴硬,我用wstring代替。 但另一個問題出現:

我有一個使用stringcoutcin獲取用戶輸入CONSLE,現在wstringwcinwcout斷非ASCII文本輸入了另一個代碼把一部分...

對於我的代碼是:

string myString; 
//... 
cin >> myString; 
//... 
cout << myString; 

更改爲:

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

如果用戶使用非ASCII字符,則輸入和輸出文本已損壞。

+0

爲什麼你要在第一時間轉換?如果您需要使用國際化的非ASCII文本,請使用'wstring'。 –

+3

您可以使用WideCharToMultiByte API – Asesh

+0

如果不知道源和目標編碼,此問題太寬泛。 – MrEricSir

回答

0

好吧,谷歌後,我可以最終使用cin和wstring在一起沒有unicode問題。 我添加了幾行:

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; 
相關問題