String
decode(String text)
Source
static String decode(String text) {
List<int> codes = new List<int>();
List<int> bytes = new List<int>();
int len = text.length;
for (int i = 0; i < len; i++) {
var codeUnit = text.codeUnitAt(i);
if (codeUnit == _PERCENT) {
if (i + 3 > text.length) {
bytes.add(_PERCENT);
continue;
}
int hexdecoded = _hexCharPairToByte(text, i + 1);
if (hexdecoded > 0) {
bytes.add(hexdecoded);
i += 2;
} else {
bytes.add(_PERCENT);
}
} else {
if (!bytes.isEmpty) {
codes.addAll(
const Utf8Decoder(allowMalformed: true)
.convert(bytes)
.codeUnits);
bytes.clear();
}
if (codeUnit == _PLUS) {
codes.add(_SPACE);
} else {
codes.add(codeUnit);
}
}
}
if (!bytes.isEmpty) {
codes.addAll(const Utf8Decoder()
.convert(bytes)
.codeUnits);
bytes.clear();
}
return new String.fromCharCodes(codes);
}