The Windows1251Codec().decode(...) method throws a runtime error (_TypeError (Null check operator used on a null value) when the input contains null bytes (0x00) — even though 0x00 is a valid byte in Windows-1251 and should decode into the Unicode null character (\u0000).
Example
The following code reproduces the problem:
final input = Uint8List.fromList([
73, 118, 97, 110, 111, 118, 32, 73, 118, 97, 110, // "Ivanov Ivan"
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
]);
final result = const Windows1251Codec().decode(input); // throws error
print(result);
Workaround:
Remove null characters from the string beforehand.
Uint8List safeSlice(Uint8List input) {
final index = input.indexOf(0);
return index == -1 ? input : input.sublist(0, index);
}
final safe = safeSlice(input);
final result = const Windows1251Codec().decode(safe);