◆ set 時にフラグ変更だけじゃなくて 内部バッファの変換もしてる
◆ 戻すのは大変そう
◆ utf-8 で U+FFFD(�) に変換されたものなど完全に戻せない場合もある

Readable Stream を受け取って処理する関数を作っていて setEncoding を常になしにして Buffer にしたいです
すでに encoding がユーザによって設定された場合も解除して Buffer にしたいです
ドキュメントには解除らしきものは載っていません
https://nodejs.org/api/stream.html#stream_readable_setencoding_encoding

とりあえず utf-8 を指定したあとで null を設定してみましたが utf-8 としてデコードした文字列で受け取れました
解除方法くらいありそうなものですけど

仕方ないのでソースを見てみることにしました
setEncoding の処理はここです
https://github.com/nodejs/node/blob/b50c01c032b6fce5b2d2e370c9c23e31b8d656c9/lib/_stream_readable.js#L339-L358

「// If setEncoding(null), decoder.encoding equals utf8」とコメントがあるので null だとデフォルトの utf-8 になるようですね
序盤を見てると decoder を設定してるので これをクリアすればできそうと思ったのですが……後半を見るとすでに buffer に入ってる Buffer 型のデータは decoder でデコードした上で buffer に再設定しています
read されるときに変換するのではなく Readable Stream への書き込み時に変換しておいて read 時はそのまま出力してるようです
内部で持ってる buffer が setEncoding のフォーマットになっている必要があるので setEncoding 呼び出し時にすでに buffer にあるデータはその場で変換されます

そうなると単純に encoding を変えるだけじゃなくて変換済み buffer も元に戻す処理がいります
setEncoding 関数自体にそういう処理がないので自分でやらないといけないです
仮にやったとしても utf-8 として不正文字が U+FFFD 置き換えられたりしているともとに戻せません
間違ったものを指定したユーザが悪いとも言えますが まだ data イベントなどで取り出していなくて buffer にある状況ならもとに戻せてほしいのですけどね