C++ 在C+中将UTF16(Windows wchar#t)转换为UTF8+;非英语字母损坏(韩语)

C++ 在C+中将UTF16(Windows wchar#t)转换为UTF8+;非英语字母损坏(韩语),c++,utf-8,windows-runtime,utf-16,c++-cx,C++,Utf 8,Windows Runtime,Utf 16,C++ Cx,我正在尝试制作一个多平台应用程序。在Windows应用商店应用程序(winrt)端,打开一个文件并以Platform::String格式读取其路径,该格式在Windows中为wchar\u t,UTF16 因为我的核心逻辑是平台无关的,只使用标准C++数据类型,所以我通过这个代码将路径转换成UTF8中的STD::string: Platform::String^ copyPath = copy->Path; std::wstring source(copyP

我正在尝试制作一个多平台应用程序。在Windows应用商店应用程序(winrt)端,打开一个文件并以Platform::String格式读取其路径,该格式在Windows中为wchar\u t,UTF16

因为我的核心逻辑是平台无关的,只使用标准C++数据类型,所以我通过这个代码将路径转换成UTF8中的STD::string:

        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);
Platform::String^copyPath=copy->Path;
std::wstring源(copyPath->Data());
std::wstring_convert;
std::string u8CopyPath=转换为字节(源);

但是,当我在调试器中检查u8CopyPath时,它会显示非英语字符的损坏字母。据我所知,UTF-8完全能够对非英语语言进行编码,因为它可以对单个字母使用多个字节。转换过程中是否有什么东西破坏了非英语字母?

原来这只是一个调试器的问题。一旦我把它写到文件上并检查它,它就打印出来了。< /P>这不是C++。你用的是什么方言?是什么让你认为它被破坏了?您能显示在调试器下看到的内容吗?(最好是十六进制)
据我所知,UTF-8完全能够编码非英语语言
是的。但是VisualStudio及其调试器输出可能无法处理UTF8。毕竟,大多数微软公司产品要么没有,要么仅限于UTF8支持。C++ + CX,类似于CLI,但在本机C++中实现。@ DeXANTANFA:问题是不能输出或处理UTF-8。问题是,
char*
是不明确的。它可以引用ASCII字符串、ANSI字符串或UTF-8,VisualStudio需要决定如何解释数据。由于没有附加任何提示,Visual Studio选择将
char*
解释为MBCS(代码页编码)字符串,因为这是Windows上最自然的选择。此外,您可以使用VisualStudio保存(和加载)UTF-8编码的源文件。这是正常行为。调试器将
char*
s解释为MBCS字符串。如果它使用不同的编码,则需要使用以下命令为调试器提供提示:
mystring,s8