Вам надо \uXXXX преобразовать в char16_t? Можно это руками делать. Берете по 6 байт из строки. Последние 4 руками преобразуете из 16ричной системы. Если символ от a до f, то прибавляете к нему
10-'a'
. Если от 0 до 9 -
0-'0'
.
Удобно это циклом делать, сдвигая ответ на 4 бита влево и прибавляя новый символ:
std::wstring Parse(const std::string encoded) {
std::wstring result;
for (int start = 0; start < encoded.length(); start += 6) {
if (encoded[start] != '\\' || encoded[start+1] != 'u') return result // строка неправильного формата.
char16_t nxt = 0;
for (int i = start +2; i < start+6; ++i) {
int cur = 0;
char &chr = encoded[i];
if ('0' <= chr && chr <= '9') cur = chr - '0';
if ('a' <= chr && chr <= 'f') cur = chr - 'a' + 10;
if ('A' <= chr && chr <= 'F') cur = chr - 'A' + 10;
nxt = (nxt << 4) + cur;
}
result += nxt;
}
return result;
}