convert method
Converts the GBK codeUnits
(a list of unsigned 8-bit integers) to the
corresponding string.
Uses the code units from start
to, but no including, end
.
If end
is omitted, it defaults to codeUnits.length
.
If the codeUnits
start with the encoding of a
unicodeBomCharacterRune
, that character is discarded.
Implementation
@override
String convert(List<int> codeUnits, [int start = 0, int? end]) {
var length = codeUnits.length;
end = RangeError.checkValidRange(start, end, length);
// Fast case for ASCII strings avoids StringBuffer / decodeMap.
var oneBytes = _scanOneByteCharacters(codeUnits, start, end);
StringBuffer? buffer;
if (oneBytes > 0) {
var firstPart = String.fromCharCodes(codeUnits, start, start + oneBytes);
start += oneBytes;
if (start == end) {
return firstPart;
}
buffer = StringBuffer(firstPart);
}
buffer ??= StringBuffer();
var decoder = _GbkStreamDecoder(buffer, _allowMalformed);
decoder.convert(codeUnits, start, end);
decoder.flush(codeUnits, end);
return buffer.toString();
}