Я пытаюсь создать многоплатформенное приложение. На стороне приложения 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 отлично умеет кодировать неанглийские языки, поскольку он может использовать несколько байтов для одной буквы. Есть ли что-то в конверсии, которое развращает неанглийские буквы?
Это не C++. Какой диалект вы используете? –
Что заставляет вас думать, что он поврежден? Можете ли вы показать, что вы видите под отладчиком? (желательно в гексагоне) – mvidelgauz
'Далеко, как я знаю, UTF-8 отлично умеет кодировать неанглийские языки. Да. Но Visual Studio и выход отладчика могут не справиться с UTF8. В конце концов, у большинства продуктов Microsoft есть либо нет, либо просто ограниченная поддержка UTF8. – deviantfan