We want to transfer binary data via a socket connection.
To stop extended characters becoming two bytes, we set -
system.useCodepage = true;
This mostly works, except for certain characters.

For example -

var socket = new XMLSocket()
var host = "192.168.0.7";
var port = 8008;
var chr;

system.useCodepage = true;
if (!socket.connect(host, port)) {
return;
}

// this is received by server as chr(127)
chr = chr(127);
socket.send(data +"\0" );

// this is NOT received by server as chr(128) but as chr(63)
chr = chr(128);
socket.send(data +"\0" );

In test chr(10) to chr(255) all these are received incorrectly as chr(63) -
128, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 142,
145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 158

Cross-checking the data using a packet-sniffer shows
data in error == "3F"
which should follow sequence of chr(10) to chr(255)

0A 0B 0C 0D 0E 0F ................
10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F ................
20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F !"#$%&'()*+,-./
30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F 0123456789:;<=>?
40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F ABCDEFGHIJKLMNO
50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F PQRSTUVWXYZ[\]^_
60 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F `abcdefghijklmno
70 71 72 73 74 75 76 77 78 79 7A 7B 7C 7D 7E 7F pqrstuvwxyz{|}~.
3F 81 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 8D 3F 8F ?.???????????.?.
90 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 9D 3F 3F .????????????.??
A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF ................
B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF ................
C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF ................
D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 DA DB DC DD DE DF ................
E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC ED EE EF ................
F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF ................