[Lazarus] Base64 broken in json?
Michael Van Canneyt
michael at freepascal.org
Tue Jun 2 09:20:52 CEST 2015
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.
More information about the Lazarus
mailing list