Not true. Unrecognized characters will be
printed as ?, but will be stored as its original value.
The problem here is that once the UTF8 string is compressed, it is no longer UTF8. It will just appear as random bytes to everything except the decompresser. Using ANSI or ISO-8859-1 in BytesToString() will store the bytes as though they were 8 bit characters even though some may not be printable. When you use GetBytes, the characters are converted back to a byte array which then can be decompressed back into a UTF string.
If you try this modification in your test program, you will see that all data is preserved.
Sub Activity_Create(FirstTime As Boolean)
'Do not forget to load the layout file created with the visual designer. For example:
'Activity.LoadLayout("Layout1")
Dim data() As Byte
Dim compress As CompressedStreams
data = "Playing with in-memory compression. £££".GetBytes("UTF8")
Dim compressed(), decompressed() As Byte
compressed = compress.CompressBytes(data, "zlib")
Dim x As String
x=BytesToString(compressed,0,compressed.Length,"ISO-8859-1")
decompressed = compress.DecompressBytes(x.getbytes("ISO-8859-1"), "zlib")
Msgbox(BytesToString(decompressed,0, decompressed.Length, "UTF8"), "")
End Sub