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
- OS: osx
- browser: chrome Version 66.0.3359.181 (Official Build) (64-bit)
- engine.io version: https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.1.1/socket.io.dev.js
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..
This will be fixed in engine.io v4: https://github.com/socketio/engine.io-protocol#difference-between-v3-and-v4
Fixed in Engine.IO v4: https://socket.io/blog/engine-io-4-release/