Задачка: Преобразовать строку

 

Есть возвращаемые данные JSON строкой.

Один из параметров имеет вот такую строчку

"result_comment":"\u0412\u0441\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043f\u0440\u043e\u0439\u0434\u0435\u043d\u044b, \u0433\u043e\u0442\u043e\u0432\u0438\u043c\u0441\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c",

Как преобразовать символы \u в читаемый текст? 

 
https://www.mql5.com/ru/code/13663
JSON Serialization and Deserialization (native MQL)
JSON Serialization and Deserialization (native MQL)
  • голосов: 34
  • 2015.08.18
  • o_o
  • www.mql5.com
Сериализация и десериализация JSON-протокола. Портированный код со скоростной библиотеки С++. Практичный пример: авторизация на сайте и парсинг ответа Благодарности принимаются в виде примеров, кто как применяет MQL для работы с веб-ресурсами. Поделитесь своим опытом работы с JSON в MQL. В протокол добавлены функции Escape / Unescape...
 
Taras Slobodyanik:
https://www.mql5.com/ru/code/13663

спасибо, помогла одна функция из этого проекта.

string Unescape(string a)
     {
      ushort as[], s[]; int n=StringToShortArray(a, as); if(ArrayResize(s, n)!=n) return NULL;
      int j=0,i=0;
      while(i<n)
        {
         ushort c=as[i];
         if(c=='\\' && i<n-1)
           {
            switch(as[i+1])
              {
               case '\\': c='\\'; i++; break;
               case '"': c='"'; i++; break;
               case '/': c='/'; i++; break;
               case 'b': c=8; /*08='\b'*/; i++; break;
               case 'f': c=12;/*0c=\f*/ i++; break;
               case 'n': c='\n'; i++; break;
               case 'r': c='\r'; i++; break;
               case 't': c='\t'; i++; break;
               case 'u': // \uXXXX
                 {
                  i+=2; ushort k=0;
                  for(int jj=0; jj<4 && i<n; jj++,i++)
                    {
                     c=as[i]; ushort h=0;
                     if(c>='0' && c<='9') h=c-'0';
                     else if(c>='A' && c<='F') h=c-'A'+10;
                     else if(c>='a' && c<='f') h=c-'a'+10;
                     else break; // не hex
                     k+=h*(ushort)pow(16,(3-jj));
                    }
                  i--;
                  c=k;
                  break;
                 }
              }
           }
         s[j]=c; j++; i++;
        }
      a=ShortArrayToString(s,0,j);
      return a;
     }
Причина обращения: