Allmost!  3rd Update

since if the left side is a Unix Timestamp, then you get this result:

write $zdt($zdth(1591891200000\1000,-2),3) ==> 2020-06-11 18:00:00

docs: https://docs.intersystems.com/iris20201/csp/docbook/Doc.View.cls?KEY=RCOS_fzdatetime 

timezone conversion from UTC may compensate  the 6 hours difference ! 
 in Middle Europ we have we have 2 hrs+  to UTC so

write $zdt($zdt($zdth(1591891200000\1000,-2),-3),3)
2020-06-11 16:00:00

 method OpenSFTP(ByRef sftp As %Net.SSH.SFTP) as %Status

Open up an SFTP session for SFTP activity.

 ByRef this means that the variable you pass has to be initialized first.

#dim sftp As %Net.SSH.SFTP 

 just binds the object type to variable  sftp but doesn't initialize it.
So it is <UNDEFINED>

Use your  original line instead or in addition to initalize it

Set sftp ##class(%Net.SSH.Session).%New()

I had to transfer more than a few files. so I shared a docker  volume:

docker run  ...... --name=iris1 -d -v volume1:/external   ........
docker run ....... --name=iris2 -d -v volume1:/external   ........

so both containers  have permanent access and can pass files as we use to pass Globals using IRISTEMP  or CACHETEMP

The volume gets generated at first access automatically

@Luca Ravazzolo , @Jose-Tomas Salvador 

I succeeded to force an upgrade of my Win 10 to  2004 and to activate WSL2   (installation blocked until VMware was de-installed !)
and Docker Desktop For WSL2.
Quite interesting to have a Windows-Installer for a Linux program. Take care to use version >2.3.0 2  for WSL2
And it was running as expected with no troubles. No issues with Images, Containers, Volumes, Networks.

It's an interesting experience, especially as I'm not forced to use PowerShell.
Communication with Win File System goes Docker ==> WSL2 ==> Windows.
Next positive surprise: my local C:\..  was mounted byWSL2 to /mnt/c/....  (I just tried read access)

Bad surprises:
- the guide to install / activate was  just of limited help, partially confusing / contradictionary   
Google helped with useful and just commercial advice.
- Reboots: after #5 I stopped counting 

Still a challenge: I couldn't find out where WSL2 file system was homed on my C:\ drive.
 

¡ Hola Salva ! ( @Jose Tomas Salvador 

You motivated me to give it a try.
And  with a little bit of tweaking the scripts my contribution for the contest 
WebSocket Client JS with IRIS Native API as Docker Micro Server  
is also running with no issues on Docker Desktop for Windows !
A very positive experience that I didn't expect at first sight.
¡ Gracias !

Typically all strings are UTF encoded.
The average text often consist of  single-byte characters  (a subset of UTF-8)   
As soon as a multibyte character joins the string the whole string just uses WIDE characters

example:

USER>set txt="cher ami j'ai besoin de 100 eur"
USER>zw txt
txt="cher ami j'ai besoin de 100 eur"
 
USER>zzdump txt
0000: 63 68 65 72 20 61 6D 69 20 6A 27 61 69 20 62 65         cher ami j'ai be
0010: 73 6F 69 6E 20 64 65 20 31 30 30 20 65 75 72            soin de 100 eur

USER>set txt="cher ami j'ai besoin de 100 €"
USER>zw txt
txt="cher ami j'ai besoin de 100 €"
 
USER>zzdump txt
0000: 0063 0068 0065 0072 0020 0061 006D 0069                 cher ami
0008: 0020 006A 0027 0061 0069 0020 0062 0065                  j'ai be
0010: 0073 006F 0069 006E 0020 0064 0065 0020                 soin de
0018: 0031 0030 0030 0020 20AC                                100 €

 

The conversion happens totally internal.
depending on your needs you can select the national language table.
different languages sort differently.   e.g German äöü vs. aou