ProcessStartInfoでは、子プロセスの標準ストリームで使用するエンコーディングを指定することができます。 子プロセスの標準ストリームが自プロセスとは異なるエンコーディングを使用しているなど、標準ストリームでのエンコーディングを指定する必要がある場合には、以下のプロパティで指定します。

StandardOutputEncoding/StandardErrorEncodingプロパティでは、標準出力・標準エラーで用いるエンコーディングを指定できます。 .NET Standard 2.1/.NET Core 2.1以降では、StandardInputEncodingプロパティで標準入力のエンコーディングも指定できます。

parent.exe:子プロセスの標準ストリームのエンコーディングを指定して読み書きする .NET Standard 2.1/.NET Core 2.1
Imports System
Imports System.Diagnostics
Imports System.IO
Imports System.Text

Class Sample
  Shared Sub Main()
    ' 子プロセスchild.exeの起動オプション
    Dim psi As New ProcessStartInfo("child.exe")
    ' シェルを使用せず子プロセスを起動する
    ' (リダイレクトするために必要)
    ' ⚠.NET Core/.NET 5以降ではデフォルトでFalseとなっている
    psi.UseShellExecute = False
    ' 起動した子プロセスの標準入出力をリダイレクトする
    psi.RedirectStandardInput = True
    psi.RedirectStandardOutput = True

    ' 標準入力への書き込み時にShift_JISを用いる
    psi.StandardInputEncoding = shift_jis
    ' 標準出力からの読み込み時にUTF-8を用いる
    psi.StandardOutputEncoding = Encoding.UTF8

    ' 子プロセスを起動する
    Using child As Process = Process.Start(psi)
      Dim output As String = Nothing

      ' リダイレクトされた子プロセスの標準入出力を取得する
      Using stdin As StreamWriter = child.StandardInput, _
            stdout As StreamReader = child.StandardOutput
        ' 子プロセスの標準入力に書き込む
        stdin.WriteLine("こんにちは、世界🌐")

        ' 子プロセスの標準出力から読み込む
        output = stdout.ReadLine()
      End Using ' 子プロセスの標準入出力を閉じて読み書きを終了する

      ' 子プロセスの終了を待機する
      child.WaitForExit()

      ' 読み込んだテキストを表示する
      Console.WriteLine($"output: ""{output}""")
    End Using
  End Sub

#If NETFRAMEWORK Then
  Shared ReadOnly shift_jis As Encoding = Encoding.GetEncoding("shift_jis")
#Else
  ' `dotnet add sample.vbproj package System.Text.Encoding.CodePages`
  Shared ReadOnly shift_jis As Encoding = CodePagesEncodingProvider.Instance.GetEncoding("shift_jis")
#End If
End Class
child.exe:標準入力(Shift_JIS)から読み込み標準出力(UTF-8)に書き込む
Imports System
Imports System.IO
Imports System.Security.Cryptography

Class Sample
  Shared Sub Main()
    ' 標準入力のエンコーディングにShift_JISを用いる
    Console.InputEncoding = shift_jis
    ' 標準出力のエンコーディングにUTF-8を用いる
    Console.OutputEncoding = Encoding.UTF8

    ' 標準入力から読み込んだ内容をそのまま標準出力に書き込む
    ' (Shift_JISからUTF-8へ変換される)
    Console.WriteLine(Console.ReadLine())
  End Sub

#If NETFRAMEWORK Then
  Shared ReadOnly shift_jis As Encoding = Encoding.GetEncoding("shift_jis")
#Else
  ' `dotnet add sample.vbproj package System.Text.Encoding.CodePages`
  Shared ReadOnly shift_jis As Encoding = CodePagesEncodingProvider.Instance.GetEncoding("shift_jis")
#End If
End Class
実行結果
>parent.exe
output: "こんにちは、世界??"

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