User bio
404 bio not found
Member since Jul 25, 2017
Posts:
Replies:
The first part (Base 64 encoding is not able to encode ... unicode (2 byte) characters) is correct. The second part (data-->utf8-->base64 and base64-->utf8-->data) is correct only if there is an agreement beetwen the sender and receiver about the double-encoding (utf8+base64).
If I was told, I get a base64 encoded file then I expect a file which is only base64 encoded and not a mix of several encodings including base64. A simple way to encode your document could be something like this:
ClassMethod Encode(infile, outfile)
{
// file-binary reads bytes and not characters
set str = ##class(%Stream.FileBinary).%New()
set str.Filename = infile
set len = 24000 // len #3 must be 0 !
set nonl = 1 // no-newline: do not insert CR+LF
do str.Rewind()
open outfile:"nwu":0
if $test {
use outfile
while 'str.AtEnd { write $system.Encryption.Base64Encode(str.Read(len),nonl) }
close outfile
}
quit $test
}
Take a look at the classes $system.Security and $system.License, whichever better fulfills your needs
Certifications & Credly badges:
Julius has no Certifications & Credly badges yet.
Global Masters badges:
Followers:
Following:
Julius has not followed anybody yet.
Class DC.BigJSON Extends %RegisteredObject { ClassMethod Test(filename) { if ..SaveToFile(..MakeJSON(), filename) { write "Save OK",! write "Size ",##class(%File).GetFileSize(filename),! set input=##class(%File).%New(filename) set sts=input.Open("RS") if sts { set json={}.%FromJSON(input) set iter=json.%GetIterator() while iter.%GetNext(.key, .val) { write "key=",key," size=",$l(val)," data=",$e(val,1,10)_"...",! } } else { write $system.Status.GetOneErrorText(sts),! } } } ClassMethod MakeJSON() { set obj={} set obj.text1=$tr($j("",3600000)," ","a") set obj.text2=$tr($j("",3600000)," ","b") set obj.text3=$tr($j("",3600000)," ","c") quit obj } ClassMethod SaveToFile(obj, filename) { set file=##class(%File).%New(filename) set sts=file.Open("wnu") if sts { do obj.%ToJSON(file) do file.Rewind() use file.Name do file.OutputToDevice() do file.Close() quit 1 } else { quit sts } } }
The size shouldn't be a problem
USER>do ##class(DC.BigJSON).Test("/tmp/test1.txt") Save OK Size 10800034 key=text1 size=3600000 data=aaaaaaaaaa... key=text2 size=3600000 data=bbbbbbbbbb... key=text3 size=3600000 data=cccccccccc...