viewtopic.php?f=5&t=43898
----
Получаю с телеграмма сообщение с эмодзи.
..."text":"\u2600\ufe0f"}
При преобразовании и сохранении в строку
- Код: Выделить всё
jsonObj:=GetJSON( sResp ) as TJSONObject;
tele_txt:= jsonObj.Items[i].FindPath(path+'text').AsString;
Получаю
..."text" : "☀}
т.е. преобразование \u2600\ufe0f дает кракозябру которая к тому же съедает кавычки в строке.
Получается ошибка в fpjson в функции
function JSONStringToString(const S: TJSONStringType): TJSONStringType;
А именно в преобразовании,
- Код: Выделить всё
Case S[I] of
'\','"','/'
: App:=S[I];
'b' : App:=#8;
't' : App:=#9;
'n' : App:=#10;
'f' : App:=#12;
'r' : App:=#13;
'u' : begin
U2:=BufferHexToInt(PAnsiChar(@S[I+1]));
if U2=-1 then
Raise EJSON.Create('Invalid unicode hex code: '+Copy(S,I+1,4));
Inc(I,4);
if (U1<>0) then
begin
App:={$IFDEF FPC_HAS_CPSTRING}UTF8Encode({$ENDIF}WideChar(U1)+WideChar(U2){$IFDEF FPC_HAS_CPSTRING}){$ENDIF};
U2:=0;
end
else
U1:=U2;
end;
end;
Не могу до конца понять что тут происходит, но такое ощущение, что просто не реализована работа с двойным \u для одного символа