2016-07-07 3 views
-2

Я пытаюсь создать многоплатформенное приложение. На стороне приложения Windows Store (winrt) откройте файл и прочитайте его путь в формате Platform :: String, который является wchar_t, UTF16 в Windows.Преобразование UTF16 (Windows wchar_t) в UTF8 на C++ Неанглийские буквы повреждены (корейский)

С моей основной логикой зависит от платформы и использовать только стандартные C++ типов данных, я преобразовал путь в станде :: строку в 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 в отладчик, он показывает поврежденные буквы для неанглийских символов. Насколько я знаю, UTF-8 отлично умеет кодировать неанглийские языки, поскольку он может использовать несколько байтов для одной буквы. Есть ли что-то в конверсии, которое развращает неанглийские буквы?

+0

Это не C++. Какой диалект вы используете? –

+1

Что заставляет вас думать, что он поврежден? Можете ли вы показать, что вы видите под отладчиком? (желательно в гексагоне) – 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

Смежные вопросы