[Lazarus] Base64 broken in json?
"Leonardo M. Ramé"
l.rame at griensu.com
Tue Jun 2 14:11:04 CEST 2015
El 02/06/15 a las 04:20, Michael Van Canneyt escibió:
>
>
> On Mon, 1 Jun 2015, "Leonardo M. Ramé" wrote:
>
>> El 30/05/15 a las 13:29, silvioprog escibió:
>>> On Sat, May 30, 2015 at 12:14 PM, "Leonardo M. Ramé" <l.rame at griensu.com
>>> <mailto:l.rame at griensu.com>> wrote:
>>>
>>>
>>> [Window Title]
>>> project1
>>>
>>> [Content]
>>> { "var1" : "bGVvbmFyZG8=" } - leonardo
>>>
>>> [OK]
>>>
>>> But after take a look at your code, it seems better to use as:
>>>
>>> myString := '{ "var1": "' + StringToJsonString(Base64EncodedString) +
>>> '" }'
>>>
>>> Because function "StringToJsonString" will encode string in a
>>> JSON-escape string.
>>>
>>
>> Hi Silvio, can you try encoding the attached file, then output using
>> both methods?.
>
> I tested your file with the following program:
>
> program jsonb;
>
> uses sysutils, classes, fpjson, jsonparser, base64;
>
> Var
> O : TJSONObject;
> F : TFileStream;
> S : TStringStream;
>
> begin
> S:=Nil;
> O:=Nil;
> try
> F:=TFileStream.Create(ParamStr(1),fmOpenRead);
> S:=TStringStream.Create('');
> With TBase64EncodingStream.Create(S) do
> try
> CopyFrom(F,0);
> Flush;
> O:=TJSONObject.Create(['file',S.DataString]);
> finally
> Free;
> end;
> FreeAndNil(S);
> S:=TStringStream.Create(O.Get('file'));
> S.Position:=0;
> FreeAndNil(F);
> F:=TFileStream.Create(ChangeFileExt(paramstr(1),'.base64'),fmCreate);
> F.CopyFrom(S,0);
> finally
> O.Free;
> F.Free;
> S.Free;
> end;
> end.
>
> cadwal: >./jsonb plantilla-original.ott
> cadwal: >base64 -d plantilla-original.base64 > b.ott
> cadwal: >ls *.ott -l
> -rw-rw-r-- 1 michael michael 41956 Jun 2 09:16 b.ott
> -rw-rw-r-- 1 michael michael 41956 Jun 2 09:05 plantilla-original.ott
> cadwal: >cmp b.ott plantilla-original.ott
>
> cmp reports all is well.
>
> Michael.
>
>
Thanks Michael, what if you save the json object to file using:
with TStringList.Create do
begin
Text := O.AsJson;
SaveToFile('test.json');
end;
Then copy the content of the "file" variable, and save as test.base64?
and try base64 -d test.base64, this is what I tried to do and got errors
decoding.
More information about the Lazarus
mailing list