Skip to content

Commit 7f67d7c

Browse files
committed
replace decodeURIComponent... with TextDecoder.decode
1 parent 64e0927 commit 7f67d7c

File tree

2 files changed

+19
-47
lines changed

2 files changed

+19
-47
lines changed

esm/core.js

+9-19
Original file line numberDiff line numberDiff line change
@@ -138,18 +138,14 @@ class Struct {
138138
let size = this.byte_lengths[f];
139139
var append_target;
140140
if (f == 's') {
141-
var sarray = new Array();
142-
append_target = sarray;
141+
output.push(buffer.slice(offset, offset + n));
142+
offset += n;
143143
}
144144
else {
145-
append_target = output;
146-
}
147-
for (var i = 0; i < n; i++) {
148-
append_target.push(view[getter](offset, !big_endian));
149-
offset += size;
150-
}
151-
if (f == 's') {
152-
output.push(sarray.reduce(function (a, b) { return a + String.fromCharCode(b) }, ''));
145+
for (var i = 0; i < n; i++) {
146+
output.push(view[getter](offset, !big_endian));
147+
offset += size;
148+
}
153149
}
154150
}
155151
return output
@@ -209,15 +205,9 @@ export class DataView64 extends DataView {
209205
}
210206

211207
getString(byteOffset, littleEndian, length) {
212-
var output = "";
213-
for (var i = 0; i < length; i++) {
214-
let c = this.getUint8(byteOffset + i);
215-
if (c) {
216-
// filter out zero character codes (padding)
217-
output += String.fromCharCode(c);
218-
}
219-
}
220-
return decodeURIComponent(escape(output));
208+
const str_buffer = this.buffer.slice(byteOffset, byteOffset + length);
209+
const decoder = new TextDecoder();
210+
return decoder.decode(str_buffer);
221211
}
222212

223213
getVLENStruct(byteOffset, littleEndian, length) {

esm/dataobjects.js

+10-28
Original file line numberDiff line numberDiff line change
@@ -293,15 +293,9 @@ export class DataObjects {
293293
if (dtype_class == 'VLEN_STRING') {
294294
let character_set = dtype[2];
295295
var [vlen, vlen_data] = this._vlen_size_and_data(buf, offset);
296-
let fmt = '<' + vlen.toFixed() + 's';
297-
let str_data = struct.unpack_from(fmt, vlen_data, 0)[0];
298-
if (character_set == 0) {
299-
//# ascii character set, return as bytes
300-
value[i] = str_data;
301-
}
302-
else {
303-
value[i] = decodeURIComponent(escape(str_data));
304-
}
296+
const encoding = (character_set == 0) ? "ascii" : "utf-8";
297+
const decoder = new TextDecoder(encoding);
298+
value[i] = decoder.decode(vlen_data);
305299
offset += 16
306300
}
307301
else if (dtype_class == 'REFERENCE') {
@@ -707,18 +701,12 @@ export class DataObjects {
707701
}
708702
else if (dtype_class == 'VLEN_STRING') {
709703
let character_set = this.dtype[2];
704+
const encoding = (character_set == 0) ? "ascii" : "utf-8";
705+
const decoder = new TextDecoder(encoding);
710706
var value = [];
711707
for (var i = 0; i < fullsize; i++) {
712-
var [vlen, vlen_data] = this._vlen_size_and_data(this.fh, data_offset);
713-
let fmt = '<' + vlen.toFixed() + 's';
714-
let str_data = struct.unpack_from(fmt, vlen_data, 0)[0];
715-
if (character_set == 0) {
716-
//# ascii character set, return as bytes
717-
value[i] = str_data;
718-
}
719-
else {
720-
value[i] = decodeURIComponent(escape(str_data));
721-
}
708+
const [vlen, vlen_data] = this._vlen_size_and_data(this.fh, data_offset);
709+
value[i] = decoder.decode(vlen_data);
722710
data_offset += 16;
723711
}
724712
return value;
@@ -753,15 +741,9 @@ export class DataObjects {
753741
let vlen_data = gheap.objects.get(object_index);
754742
if (dtype_class == 'VLEN_STRING') {
755743
let character_set = this.dtype[2];
756-
let fmt = '<' + item_size.toFixed() + 's';
757-
let str_data = struct.unpack_from(fmt, vlen_data, 0)[0];
758-
if (character_set == 0) {
759-
//# ascii character set, return as bytes
760-
data[i] = str_data;
761-
}
762-
else {
763-
data[i] = decodeURIComponent(escape(str_data));
764-
}
744+
const encoding = (character_set == 0) ? "ascii" : "utf-8";
745+
const decoder = new TextDecoder(encoding);
746+
data[i] = decoder.decode(vlen_data);
765747
}
766748
}
767749
}

0 commit comments

Comments
 (0)