是否将UTF8编码的字节缓冲区转换为wstring? C++标准模板库(STL)提供了将UTF8编码的字节缓冲区转换为WScReuns/P>的方法吗?

是否将UTF8编码的字节缓冲区转换为wstring? C++标准模板库(STL)提供了将UTF8编码的字节缓冲区转换为WScReuns/P>的方法吗?,c++,stl,cross-platform,C++,Stl,Cross Platform,例如: const unsigned char* szBuf = (const unsigned char*) "d\xC3\xA9j\xC3\xA0 vu"; std::wstring str = method(szBuf); // Should assign "déjà vu" to str 我希望避免实现自己的UTF8转换代码,如下所示: const unsigned char* pch = szBuf; while (*pch != 0) { if ((*pch &am

例如:

const unsigned char* szBuf = (const unsigned char*) "d\xC3\xA9j\xC3\xA0 vu";
std::wstring str = method(szBuf); // Should assign "déjà vu" to str
我希望避免实现自己的UTF8转换代码,如下所示:

const unsigned char* pch = szBuf;    
while (*pch != 0)
{
    if ((*pch & 0x80) == 0)
    {
    str += *pch++;
    }
    else if ((*pch & 0xE0) == 0xC0 && (pch[1] & 0xC0) == 0x80)
    {
        wchar_t ch = (((*pch & 0x1F) >> 2) << 8) +
            ((*pch & 0x03) << 6) +
            (pch[1] & 0x3F);
        str += ch;
        pch += 2;
    }
    else if (...)
    {
        // other cases omitted
    }
}
const unsigned char*pch=szBuf;
而(*pch!=0)
{
if((*pch&0x80)==0)
{
str+=*pch++;
}
如果(*pch&0xE0)==0xC0&&(pch[1]&0xC0)==0x80)
{
wchar_t ch=((*pch&0x1F)>>2)在C++11中,你可以使用。如果你没有,你可以说服自己去做你想做的事情;不幸的是,这也不是普遍存在的,不是所有有UTF-8的实现都支持UTF-8,而且我不知道有什么方法可以找到合适的东西来传递到
iconv\u open
进行
wchar\u t
的转换


如果您没有这两种功能,最好的选择是第三方库,例如。令人惊讶的是,Boost似乎没有任何功能,尽管我可能会错过它。

对于C++11,是的!请参见此处的答案:使用新的
codevt
功能,您可以将UTF-8转换为UTF-32,从宽到窄,以及narrow到UTF-32,然后比较两个UTF-32序列。如果c++11不是一个选项,您可以看到UTF cpp库:
std::wstring_convert<std::codecvt_utf8<wchar_t>,wchar_t> convert;
str = convert.from_bytes((const char*)szBuf);