iddqd345 0 Posted December 6, 2024 Hi, I need to send the following line in the request: S := 'aaa'+#29+'bbb' If I do this soNode.AsArray.s[0] := S; HttpRest.RestParams.AdditemSO('codes',soNode); then it is sent as 'aaa~bbb' If I escape myself: S := 'aaa\u001dbbb'; then the result: 'aaa\\u001dbbb' This is a strange result. Why does this happen? In TRestParams.AddItemSO, escaping when getting from ISuperObject is disabled: Items[Index].PValue := aValue.AsJson(false,false) { no indent, no escape } At the same time, in RestRequest: EncParams := AnsiString(IcsStrRemCntlsA(EncParams)); where "Source^ < IcsSpace" replaced with '~'. Yes, I found a solution: HttpRest.RestParams.AddItem('codes', soNode.AsJSon(False,true),True); but it doesn't look very logical when using SuperObject I don't understand the logic of not full escaping when using AddItemSO. In this case, when escape=False, in TSuperObject.Write DoMinimalEscape is executed instead of DoEscape, which escapes '\', but does not escape char < #32 Perhaps this is a mistake? Share this post Link to post
Angus Robertson 584 Posted December 7, 2024 Sorry, no quick answer. The issue here is avoiding multiple escaping with nested escaped objects. which is why some AddItem overloads have an ARaw parameter to skip escaping, but not AddItemSO. I'll need to look carefully at this so as not to break anything, mat be a while. Angus Share this post Link to post
Angus Robertson 584 Posted January 15 I'm looking at your Json problem, the main issue here is whether it's acceptable to use non-printing characters in Json values. When I wrote TRestParams, I assumed that non-printing characters would be escaoped before beiing added to SuperObject so used the AsJson option not to escape them a second tme. But that should really be an optional, so I'll add a second parameter to AddItemSO so escaping becomes the default, but can be changed. Your comment about 'aaa~bbb' being sent was incorrect, the component translates non-printing characters for logging and display, the Json would have contained your original #29 character which would have confused the server. Angus Share this post Link to post
Angus Robertson 584 Posted 5 hours ago Should be in SVN today, if I don't get distracted. Angus Share this post Link to post