socketio/engine.io-client

4 byte unicode seems to be counted as 2 bytes

freman opened this issue ยท 3 comments

You want to:

  • report a bug
  • request a feature

Current behaviour

var socket = io({ transports: ['polling'], forceBase64: true });
socket.emit('chat message', '๐ŸŽ‰');

Counts the ๐ŸŽ‰ as 2 bytes, but it's actually 4

which results in it sending 23:42["chat message","...."] over the wire

It should be sending25:42["chat message","...."] over the wire

Conversely when I send back 25:42["chat message","...."] the client disconnects

Steps to reproduce (if the current behaviour is a bug)

var socket = io({ transports: ['polling'], forceBase64: true });
socket.emit('chat message', '๐ŸŽ‰');
socket.on('chat message', function (msg) {
    console.log(msg);
});

Expected behaviour

send and receive ๐ŸŽ‰ over a polling connection

Setup

Other information (e.g. stacktraces, related issues, suggestions how to fix)

I'm using the googollee go-socket.io library in linux. You can put together an exact sample of what I have with (Assuming you have go installed)

go get github.com/googollee/go-socket.io
cd $GOPATH/src/github.com/googollee/go-socket.io/example
sed -i bak \
    -e 's/= io()/= io({ transports: ['polling'], forceBase64: true })/' \
    -e 's,/socket.io-1.3.7.js,//cdnjs.cloudflare.com/ajax/libs/socket.io/2.1.1/socket.io.dev.js,' assets/index.html
go run main.go

A chat will be started on localhost:5000 you can try sending unicode characters

Related: socketio/engine.io-parser#81 (comment)

I guess we'll have another breaking change then..