Skip to content

Commit bed2591

Browse files
committed
Better text encoding
1 parent abf5acb commit bed2591

3 files changed

Lines changed: 10 additions & 13 deletions

File tree

package-lock.json

Lines changed: 2 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/client/Client.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,6 @@ export default class Client extends EventEmitter {
5858
*/
5959
onMessage(event) {
6060
const { name, data } = this.encoder.decode(event.data);
61-
6261
this.emit(name, data);
6362
}
6463

src/encoder/codec/StringCodec.js

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,15 @@ export default class StringCodec extends Codec {
1515
* {@inheritdoc}
1616
*/
1717
encode(buffer, offset, data) {
18-
const view = new DataView(buffer, offset, this.getByteLength(data));
19-
const { length } = (data || '');
18+
const encoder = new TextEncoder();
19+
const bytes = encoder.encode(data || '');
20+
const length = bytes.length;
21+
const view = new DataView(buffer, offset, length + 1);
2022

2123
view.setUint8(0, length);
2224

2325
for (var index = 0; index < length; index++) {
24-
view.setUint16(1 + (index * 2), data[index].charCodeAt(0));
26+
view.setUint8(index + 1, bytes[index]);
2527
}
2628
}
2729

@@ -31,12 +33,9 @@ export default class StringCodec extends Codec {
3133
decode(buffer, offset) {
3234
const view = new DataView(buffer, offset);
3335
const length = view.getUint8(0);
34-
const chars = new Array(length);
36+
const bytes = buffer.slice(offset + 1, offset + 1 + length);
37+
const decoder = new TextDecoder('utf-8');
3538

36-
for (var index = 0; index < length; index++) {
37-
chars[index] = view.getUint16(1 + index * 2);
38-
}
39-
40-
return String.fromCharCode(...chars);
39+
return decoder.decode(bytes);
4140
}
4241
}

0 commit comments

Comments
 (0)