C++ 在基于英语的系统上将UTF-8路径转换为宽字符会引发异常
我有一个应用程序,可以扫描文件夹路径并将其呈现给用户。我一直在使用一个简单的实用程序将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
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