C++ 如何解析包含unicode文本的std::string?

C++ 如何解析包含unicode文本的std::string?,c++,unicode,stl,ascii,C++,Unicode,Stl,Ascii,我有std::string,它存储以UTF编码的字符。例如: std::string a = "\\u00c1\\u00c4\\u00d3"; 请注意,a的长度为18(3个字符,每个UTF字符6个ASCII符号) >强>问题< /强>:如何将 < 转换成只有3个字符的C++字符串?是否有任何标准函数(库)来执行?标准C++库中没有任何东西可以自动处理这种转换。您必须自己解析此字符串,手动将每个6字符“\uxxx”子字符串转换为1-wchar值0xXXXX,然后根据需要将其

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

std::string a = "\\u00c1\\u00c4\\u00d3";
请注意,
a
的长度为18(3个字符,每个UTF字符6个ASCII符号)


<> >强>问题< /强>:如何将<代码> < <代码>转换成只有3个字符的C++字符串?是否有任何标准函数(库)来执行?

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

例如:

std::string a=“\\u00c1\\u00c4\\u00d3”;
std::wstring-ws;
ws.reserve(a.size());
对于(size_t i=0;i

或者:

std::string a=“\\u00c1\\u00c4\\u00d3”;
std::wstring-ws;
ws.reserve(a.size());
大小\u t开始=0;
做
{
大小\u t found=a.find(\\u“,开始);
如果(find==std::string::npos)中断;
如果(开始<找到)
{
//根据用于编码字符串的字符集,
//这可能需要也可能不需要进一步解码。。。
插入(ws.end(),a.begin()+开始,a.begin()+找到);
}
wchar_t wc=static_cast(std::stoi(a.substr(found+2,4),nullptr,16));
ws.推回(wc);
开始=找到+6;
}
虽然(正确);
如果(开始


否则,请使用已经为您进行此类翻译的第三方库。

请指定哪个操作系统。wstring在不同的系统中是不同的,有些系统对此有特定的功能。它是。您可能需要或操作系统支持。