2016-11-24 4 views
-1

나는 win32 응용 프로그램에서하고 있고 유니 코드 텍스트 입력을 허용하는 편집 컨트롤이 있습니다. 나는 std::string에 텍스트를 얻기 위해 다음 코드를 사용WCHAR 배열을 유니 코드로 std :: string으로 가져 오는 중입니까?

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

dubugger에서를, I는 입력이 유니 코드 텍스트이지만, myString이 currupted 때 myWString 괜찮 볼 수 있습니다.

어떻게 올바르게 변환 할 수 있습니까?

는 편집 :

확인보다는 string와 장난, 내가 대신 wstring를 사용합니다. 그러나 또 다른 문제가 발생할 수 :

나는 밖으로 지금 consle에 wstring, wcinwcout 휴식 비 ASCII 문자 입력을 사용자 입력을 얻을하고 string, coutcin를 사용하고 다른 코드를 넣어 한 부분 ...

내 코드에 대한

그것은이었다

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

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

가로 변경

사용자가 비 ASCII 문자를 사용하면 입력 및 출력 텍스트가 손상됩니다.

+0

가 왜 처음에 변환 할 수 있습니까? 국제화 된 비 ASCII 텍스트로 작업해야하는 경우에는'wstring'을 사용하십시오. –

+3

WideCharToMultiByte API – Asesh

+0

사용할 수 있습니다.이 질문은 원본 및 대상 인코딩을 모른 채 너무 광범위합니다. – MrEricSir

답변

0

괜찮 았는데, 주위에 Google 후, 마침내 유니 코드 문제없이 함께 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;