2016-07-07 4 views
-2

멀티 플랫폼 응용 프로그램을 만들려고합니다. Windows 저장소 응용 프로그램 (winrt) 쪽에서 파일을 열고 Windows에서 wchar_t, UTF16 인 Platform :: String 형식으로 경로를 읽습니다. 그러나C++에서 UTF16 (Windows wchar_t)을 UTF8로 변환. 영어 이외의 문자가 손상됨 (한국어)

 Platform::String^ copyPath = copy->Path; 
     std::wstring source(copyPath->Data()); 
     std::wstring_convert<std::codecvt_utf8_utf16<wchar_t >, wchar_t > convert; 
     std::string u8CopyPath = convert.to_bytes(source); 

, 나는에 u8CopyPath을 확인 : 내 코어 로직 이후

표준 C++ 데이터 유형을 사용하는 경우에만 독립적 인 플랫폼으로,이 코드를 통해 UTF8에 표준 : : 문자열로 경로를 변환 한 디버거에서 영어 이외의 문자에 대해 손상된 문자가 표시됩니다. 필자가 아는 한, UTF-8은 한 문자에 여러 바이트를 사용할 수 있기 때문에 비영어권을 완벽하게 인코딩 할 수 있습니다. 전환시 영어 이외의 문자가 손상되는 부분이 있습니까?

+0

그건 C++가 아닙니다. 어떤 방언을 사용하고 있습니까? –

+1

왜 그것이 손상된 것으로 생각합니까? 디버거에서 표시되는 것으로 표시 할 수 있습니까? (바람직하게는 16 진수) – mvidelgauz

+2

'내가 아는 한 멀리 UTF-8은 영어 이외의 언어를 완벽하게 인코딩 할 수있다 '네. 그러나 Visual Studio와 디버거 출력은 UTF8을 처리 할 수 ​​없습니다. 결국 대부분의 Microsoft 제품에는 UTF8 지원이 없거나 제한되어 있습니다. – deviantfan

답변

0

디버거 일뿐입니다. 일단 내가 파일에 그것을 썼다 그것을 검사, 그것을 올바르게 인쇄.

+0

이것은 정상적인 동작입니다.디버거는'char *'를 MBCS 문자열로 해석합니다. 다른 인코딩을 사용하는 경우 [C++ 형식 지정자] (https://msdn.microsoft.com/en-us/library/75w45ekt.aspx) : 'mystring, s8'을 사용하여 디버거에 대한 힌트를 제공해야합니다. – IInspectable