问题描述
我有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
或者:
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));
}
}
否则,请使用已经为您完成这种翻译的第三方库。