I'm assuming this line in the server:
send_time, offset, index, data = data.decode('latin-1').split(",", 3)
is trying to deal with the 2 byte issue of some UTF-8 characters. I modified it to this:
send_time, offset, index, data = data.split(b",", 3)
which seems to work - although the codecs around it and the return streams have to be modified to accommodate that.