C++ 在基于英语的系统上将UTF-8路径转换为宽字符会引发异常

C++ 在基于英语的系统上将UTF-8路径转换为宽字符会引发异常,c++,utf-8,internationalization,C++,Utf 8,Internationalization,我有一个应用程序,可以扫描文件夹路径并将其呈现给用户。我一直在使用一个简单的实用程序将UTF-8转换为宽字符串。它运作得很好。但今天它开始抛出一个异常,我需要弄清楚该怎么做 这就是函数 inline std::wstring convertutf8(const std::string& p) { std::wstring_convert<std::codecvt_utf8<wchar_t>> wconv; return wconv.from_by

我有一个应用程序,可以扫描文件夹路径并将其呈现给用户。我一直在使用一个简单的实用程序将UTF-8转换为宽字符串。它运作得很好。但今天它开始抛出一个异常,我需要弄清楚该怎么做

这就是函数

inline std::wstring convertutf8(const std::string& p) 
{
    std::wstring_convert<std::codecvt_utf8<wchar_t>> wconv;
    return wconv.from_bytes(p.c_str());
}
这些数字是否代表“正确”的UTF-8表示?我甚至不知道。国际化对我来说不太合适

我做错什么了吗?错过一些简单的东西?这是应用程序的一部分,该应用程序扫描文件夹并将其显示给用户进行导航。我希望能够处理带有这些字符的路径的情况,正确地转换它们并继续


有人能给我一些指导吗,在这种情况下,我应该做什么才能在基于英语的系统上处理这样的路径

std::wstring\u convert
通过抛出异常来做正确的事情

0xe9
不是字符
的有效UTF-8字节序列。只有0-127(基本ASCII)范围内的代码点不需要特殊编码

字符
的有效UTF-8字节序列如下():

在这种情况下,我应该怎么做才能在 基于英语的系统


这种情况是输入中的一个错误,应按此处理。例如,向用户报告错误,以便他们修复输入。

“这些数字是否表示“正确的”UTF-8表示法?”根据这里的说法,
0xe9
的unicode,UTF8表示法是
c3 a9
。所以看起来它确实没有正确地转换它。@Blaze你的意思是它正确地抱怨e9 72不是正确的UTF-8。@ÖTiib确实。HEX列出的,应该是UTF-8,不是UTF-8。在这种情况下,输入来自C .net应用程序扫描目录,将字符串传递到C++ + CLI层,然后它进入我的C++ SDK。听起来中间层的转换做得不对。这是我自己没有处理的少数几个转换之一。谢谢至少应该知道问题出在输入字符串本身。给我一个进攻计划。
CHAR   DEC     HEX
----   ---     ----
 'n'   110     0x6e
 'u'   117     0x75
 'm'   109     0x6d
 'é'   -23     0xe9
 'r'   114     0x72
 'i'   105     0x69
0xC3, 0xA9