繁体   English   中英

将UTF8编码的字节缓冲区转换为wstring?

[英]Convert UTF8 encoded byte buffer to wstring?

C ++标准模板库(STL)是否提供任何将UTF8编码的字节缓冲区转换为wstring的方法?

例如:

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
    }
}

编辑 :感谢您的评论和答案。 此代码片段执行所需的转换:

std::wstring_convert<std::codecvt_utf8<wchar_t>,wchar_t> convert;
str = convert.from_bytes((const char*)szBuf);

在C ++ 11中,您可以使用std::codecvt_utf8 如果没有,您也许可以说服iconv做您想做的事情; 不幸的是,这也不是无处不在,不是所有支持UTF-8的实现,而且我也不知道有什么方法可以找到合适的东西传递给iconv_open来从wchar_t进行转换。

如果您没有任何一个,那么最好的选择是使用ICU之类的第三方库。 令人惊讶的是,Boost似乎没有任何目的,尽管我可能会错过它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM