Wahrscheinlich ist es die falsche Kodierung.
Aber wenn Sie diesen Code verwenden, um Blöcke von Bytes (geteilt durch ein Protokoll) zu empfangen, haben Sie einen schwerwiegenden Fehler: Es gibt keine Garantie, dass der Block unabhängig codiert wurde.
Einfacher Fall: Die Grenze von 2 Blöcken durchschneidet ein Multi-Byte-codiertes Zeichen.
Beste Lösung: Hängen Sie einen TextReader an Ihren Stream an.
Geben Sie das Ergebnis in etwas aus, das "komplexe" Codierung versteht?