Вы указали эти байты: 31, 139, 8, 0, 0, 0, 0, 0, 4
Это недопустимый UTF-8.В частности, это будет означать символ Unicode U + 0031 («ИНФОРМАЦИОННЫЙ СЕПАРАТОР ОДИН»), за которым следуют байты 139 и 8 ... и 139, за которыми следует 8, не является допустимой UTF-8 байтовой последовательностью.Даже если эти действительно сформировали правильную последовательность, у вас будет 5 символов Unicode U + 0000 (NUL), за которыми следует U + 0004 (END OF TRANSMISSION).Вряд ли в действительном HTML.
Я не знаю, что вы на самом деле фильтруете, но это недопустимый текст UTF-8.На самом деле это вовсе не похоже на текст.Возможно ли, что вы на самом деле пытаетесь применить фильтр к двоичным данным, таким как изображение?
Обратите внимание, что у вас есть еще одна фундаментальная проблема с вашим методом фильтрации: вы предполагаете, что каждый буфер содержит полный текст.Для вас вполне возможно получить один буфер, который содержит первую половину символа, а затем второй буфер, содержащий оставшуюся его часть.Для этого и нужен интерфейс System.Text.Decoder
- он с состоянием, запоминает отдельные символы.