decodeText method
Decodes the specified text
part
the text part that should be decoded
codec
the character encoding (charset)
Set isHeader
to true to decode header text using the Q-Encoding scheme, compare https://tools.ietf.org/html/rfc2047#section-4.2
Implementation
@override
String decodeText(String part, Encoding codec, {bool isHeader = false}) {
var buffer = StringBuffer();
// remove all soft-breaks:
part = part.replaceAll('=\r\n', '');
for (var i = 0; i < part.length; i++) {
var char = part[i];
if (char == '=') {
var hexText = part.substring(i + 1, i + 3);
var charCode = int.tryParse(hexText, radix: 16);
if (charCode == null) {
print(
'unable to decode quotedPrintable [$part]: invalid hex code [$hexText] at $i.');
buffer.write(hexText);
} else {
var charCodes = [charCode];
while (part.length > (i + 4) && part[i + 3] == '=') {
i += 3;
var hexText = part.substring(i + 1, i + 3);
charCode = int.parse(hexText, radix: 16);
charCodes.add(charCode);
}
try {
var decoded = codec.decode(charCodes);
buffer.write(decoded);
} on FormatException catch (err) {
print('unable to decode quptedPrintable buffer: ${err.message}');
buffer.write(String.fromCharCodes(charCodes));
}
}
i += 2;
} else if (isHeader && char == '_') {
buffer.write(' ');
} else {
buffer.write(char);
}
}
return buffer.toString();
}