convert method

String convert (
  1. List<int> codeUnits,
  2. [int start = 0,
  3. int end]
)
override

Converts the UTF-8 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

String convert(List<int> codeUnits, [int start = 0, int end]) {
  // Allow the implementation to intercept and specialize based on the type
  // of codeUnits.
  var result = _convertIntercepted(_allowMalformed, codeUnits, start, end);
  if (result != null) {
    return result;
  }

  var length = codeUnits.length;
  end = RangeError.checkValidRange(start, end, length);

  // Fast case for ASCII strings avoids StringBuffer/_Utf8Decoder.
  int oneBytes = _scanOneByteCharacters(codeUnits, start, end);
  StringBuffer buffer;
  bool isFirstCharacter = true;
  if (oneBytes > 0) {
    var firstPart = String.fromCharCodes(codeUnits, start, start + oneBytes);
    start += oneBytes;
    if (start == end) {
      return firstPart;
    }
    buffer = StringBuffer(firstPart);
    isFirstCharacter = false;
  }

  buffer ??= StringBuffer();
  var decoder = _Utf8Decoder(buffer, _allowMalformed);
  decoder._isFirstCharacter = isFirstCharacter;
  decoder.convert(codeUnits, start, end);
  decoder.flush(codeUnits, end);
  return buffer.toString();
}