everything is bytes. but not all bytes are (UTF8,ASCII, etc) strings. how the bytes are interpreted depends on the content-type (if you're downloading from an http server).
application/octet-stream could be almost anything BUT a string. by using j.getString you have made the determination that the input is a UTF8 string. that's why you get nothing but the ?'s when you try to print out the result. the server has made it known that the data are not a string (application/octet-stream). you need j.getinputstream to capture the response as bytes. that's 1/2 the job. next you need to figure out what the bytes mean.
there is no sense in reading the same bytes over and over while you try to figure out what they mean, so let's capture the bytes to a file. then you can work with that.
Wait For (j) JobDone(j As HttpJob)
If j.Success Then
Log(j.Response.GetHeaders)
Dim out As OutputStream = File.OpenOutput(File.DirInternal, "gopro.dat",False)
File.Copy2(j.GetInputStream, out)
out.Close
j.Release
Log(File.Size(File.DirInternal,"gopro.dat") & " bytes saved")
Dim gopro() As Byte = File.ReadBytes(File.DirInternal,"gopro.dat")
Dim bc As ByteConverter
Log( bc.HexFromBytes( gopro ))
else
log(j.errormessage)
end if
you've already seen you can't "print" the bytes as UTF8 (because they're not), but you can display the bytes as a hex string. that - by itself - doesn't give you the answer, but it provides something to work with.
to understand what the bytes mean, you probably need help from gopro or from somebody who has already done what you're trying to do. you'll have to
do some research. application/octet-stream implies some kind of "application" is needed to handle the "octet-stream" (the bytes).
you might start here:
https://gopro.github.io/OpenGoPro/http
seems to be an api for talking to a gopro device.