InputEncoding/OutputEncodingプロパティを指定することで、標準入出力で使用されるエンコーディングを指定・変更することができます。

Consoleクラスでは、実行環境で用いられる文字コードに基づいて標準入出力のエンコーディングが設定されますが、これとは別のエンコーディングを使用する必要がある場合には、このプロパティを変更します。

このプロパティを指定することで、例えば標準入力には常にShift_JISを用い、標準出力にはUTF-8を用いる、といったことができます。

標準入出力で使用するエンコーディングを変更する
using System;
using System.IO;
using System.Text;

class Sample {
  static void Main()
  {
    // 標準入力のエンコーディングにShift_JISを用いる
    Console.InputEncoding = shift_jis;

    // 標準出力のエンコーディングにUTF-8を用いる
    Console.OutputEncoding = Encoding.UTF8;

    // 標準入力の内容すべてを読み込み標準出力に書き込む
    // (標準入出力を介してShift_JISからUTF-8への変換が行われる)
    Console.Out.Write(Console.In.ReadToEnd());
  }

  static readonly Encoding shift_jis =
#if NETFRAMEWORK
    Encoding.GetEncoding("shift_jis");
#else
    // `dotnet add sample.csproj package System.Text.Encoding.CodePages`
    CodePagesEncodingProvider.Instance.GetEncoding("shift_jis");
#endif
}
実行結果
>chcp
現在のコード ページ: 932

>type input.shiftjis.txt
こんにちは、世界!

>:: Shift_JISのファイルinput.shiftjis.txtを標準入力に与える
>:: UTF-8で出力される標準出力の内容をoutput.utf8.txtに書き込む
>sample.exe < input.shiftjis.txt > output.utf8.txt

>type output.utf8.txt
縺薙s縺ォ縺。縺ッ縲∽ク也阜・・

>chcp 65001
Active code page: 65001

>type output.utf8.txt
こんにちは、世界!

コンソールの文字コードを変更するコマンドchcpについてはMS-DOSコマンドプロンプトTips §.文字コードの変更を参照してください。

なお、ErrorEncodingプロパティは存在しないため、標準エラーのエンコーディングを指定・変更することはできません。 SetErrorメソッドを使えば任意のTextWriterを指定できるため、目的のエンコーディングを使用するStreamWriterを作成して標準エラーのリダイレクト先として指定する、といったことはできます。

OutputEncodingプロパティにUTF-8などのエンコーディングを指定すると、標準出力にBOM(Byte Order Mark)が出力される場合があります。 この動作はランタイムの種類や実行環境によって異なります。 詳細についてはEncodingクラスとBOMありなしの制御 §.Consoleクラスを参照してください。