InputEncoding/OutputEncodingプロパティを指定することで、標準入出力で使用されるエンコーディングを指定・変更することができます。
Consoleクラスでは、実行環境で用いられる文字コードに基づいて標準入出力のエンコーディングが設定されますが、これとは別のエンコーディングを使用する必要がある場合には、このプロパティを変更します。
このプロパティを指定することで、例えば標準入力には常にShift_JISを用い、標準出力にはUTF-8を用いる、といったことができます。
標準入出力で使用するエンコーディングを変更する
Imports System
Imports System.IO
Imports System.Text
Class Sample
Shared Sub Main()
' 標準入力のエンコーディングにShift_JISを用いる
Console.InputEncoding = shift_jis
' 標準出力のエンコーディングにUTF-8を用いる
Console.OutputEncoding = Encoding.UTF8
' 標準入力の内容すべてを読み込み標準出力に書き込む
' (標準入出力を介してShift_JISからUTF-8への変換が行われる)
Console.Out.Write(Console.In.ReadToEnd())
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
実行結果
>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クラスを参照してください。