C#

【C#】文字コードを指定してファイル出力する方法について

C#で文字コードを指定してファイル出力する方法について記述します。
今回は Shift-JIS と BOM付きUTF8 にてファイル出力を行います。
ファイルに書き込む内容は、コマンドライン引数を書き込みます。

BOM付きとは

先頭に三バイトのBOMが付加されており、ファイルを読み込むプログラム側に「このファイルの文字コードはUnicodeのUTF-8形式です」と明確にしてくれている状態のこと。

BOMが付いてない場合は、プログラムが文字コードを判別する際にUTF-8かUTF-16、UTF-32、はたまた別のものか判断できず文字化けを起こす可能性があります。
文字コードを明確にすることで文字化けなどの障害を未然に防ぐことが可能となるため是非設定したい内容となります。

Shift-JISでファイル出力する方法について

using System;
// ↓StreamWriterを使用するため
using System.IO;
// ↓Encodingを使用するため
using System.Text;

class OutputSjis
{
    static void Main(string[] args)
    {
        /* ファイル出力処理 */
        if(args.Length == 0) {
            Console.WriteLine("コマンドライン引数なし");
        } else {
            //shift-JISでファイルを出力する場合
            Encoding sjisEnc = Encoding.GetEncoding("Shift_JIS");
            StreamWriter stw = new StreamWriter(@"C:\xxxx\Test.txt", false, sjisEnc);
            foreach (string a in args)
            {
                stw.WriteLine(a);
            }
            stw.Close();
        }
    }
}

出力結果

UTF-8でファイル出力する方法について

using System;

class OutputUtf8
{
    static void Main(string[] args)
    {
        /* ファイル出力処理 */
        if(args.Length == 0) {
            Console.WriteLine("コマンドライン引数なし");
        } else {
            //BOM付きUTF8でファイルを出力する場合
            System.IO.StreamWriter stw = new System.IO.StreamWriter(@"C:\xxxx\Test.txt", false, System.Text.Encoding.UTF8);
            foreach (string a in args)
            {
                stw.WriteLine(a);
            }
            stw.Close();
        }
    }
}

出力結果

説明は以上となります。
この記事が誰かの助けになれば幸いです。