如何解析包含Unicode文字的std :: string?

问题描述

我有std::string,它存储以UTF编码的字符。示例:

std::string a = "\\u00c1\\u00c4\\u00d3";

请注意,a的长度为18(3个字符,每个UTF字符6个ASCII符号)。

问题:如何将a转换为只有3个字符的C ++字符串?有任何标准功能(库)可以做到这一点吗?

解决方法

标准C ++库中没有任何东西可以自动为您处理这种转换。您将需要自己解析此字符串,将每个6个字符的"\uXXXX"子字符串手动转换为1-wchar值0xXXXX,然后可以将其存储到std::wstring或{{1 }}。

例如:

std::u16string

Live Demo

或者:

std::string a = "\\u00c1\\u00c4\\u00d3";

std::wstring ws;
ws.reserve(a.size());

for(size_t i = 0; i < a.size();)
{
    char ch = a[i++];

    if ((ch == '\\') && (i < a.size()) && (a[i] == 'u'))
    {
        wchar_t wc = static_cast<wchar_t>(std::stoi(a.substr(++i,4),nullptr,16));
        i += 4;
        ws.push_back(wc);
    }
    else
    {
        // depending on the charset used for encoding the string,// this may or may not need to be decoded further...
        ws.push_back(static_cast<wchar_t>(ch));
    }
}

Live Demo

否则,请使用已经为您完成这种翻译的第三方库。