NonSoft

文字コードを判定して
指定の文字コードに変換するサンプル(C#.NET)


 サンプル(ソース/コード)
<このサンプルの概要>
文字コードを自動判定(判別と言うべきか?)して指定の文字コードに変換するサンプルです。
文字コードの変換にはC#.NETのSystem.Text.Encodingを使用しています。

文字コードの判定には文字コード判定のサンプル(VB6/VB.NET)を使用しています。

C#.NETではSystem.Text.Encodingを使用する事で簡単に文字コードの変換が出来るようです。
手順は以下の通りです。
(1)入力ファイルをバイナリ形式で入力
(2)文字コード判定
(3)判定した文字コードをString(UNICODE)に変換
(4)String(UNICODE)を出力したい文字コードのByte配列に変換
(5)出力ファイルをバイナリ形式で出力
(6)ファイルのクローズ

もっと簡単に文字コード変換を実現したい場合はこちらのDLLがおすすめです。
文字コード判定/変換DLL(VB6/VB.NET/C#.NET)

VB.NET版はこちらです。
文字コードを判定して指定の文字コードに変換するサンプル(VB.NET)

関連情報
ADODB.Streamによる文字コード変換のサンプル(VB6/VB.NET)
WideCharToMultiByteとMultiByteToWideCharによる文字コード変換のサンプル(VB6/VB.NET)
文字コード判定&変換ツール.NET
文字コード判定/変換ツール(VB6のソース付)

★フォームモジュール(Form1.cs)
    private void button1_Click(object sender, EventArgs e)
    {
        Byte[] dat = new Byte[] { };
        System.IO.Stream sr = null;
        System.IO.Stream sw = null;
        System.IO.BinaryReader br = null;
        System.IO.BinaryWriter bw = null;
        try
        {
            // 入力ファイルをバイナリ形式で入力
            sr = System.IO.File.Open("test1.txt",
                System.IO.FileMode.Open, System.IO.FileAccess.Read);
            br = new System.IO.BinaryReader(sr);
            Array.Resize<Byte>(ref dat, (int)sr.Length);
            dat = br.ReadBytes((int)sr.Length);
            br.Close();
            sr.Close();

            // 文字コード判定
            String cod = JudgeCode(dat);

            // 判定した文字コードをString(UNICODE)に変換
            String uni;
            if (cod == "JIS")
            {
                // JISからUNICODEへの変換
                uni = System.Text.Encoding.GetEncoding("ISO-2022-JP").GetString(dat);
            }
            else if (cod == "EUC")
            {
                // EUCからUNICODEへの変換
                uni = System.Text.Encoding.GetEncoding("EUC-JP").GetString(dat);
            }
            else if (cod == "UNICODE")
            {
                // UNICODEからUNICODEへの変換
                uni = System.Text.Encoding.GetEncoding("UNICODE").GetString(dat);
            }
            else if (cod == "UTF7")
            {
                // UTF-7からUNICODEへの変換
                uni = System.Text.Encoding.GetEncoding("UTF-7").GetString(dat);
            }
            else if (cod == "UTF8")
            {
                // UTF-8からUNICODEへの変換
                uni = System.Text.Encoding.GetEncoding("UTF-8").GetString(dat);
            }
            else
            {
                // SJISからUNICODEへの変換
                uni = System.Text.Encoding.GetEncoding("SHIFT-JIS").GetString(dat);
            }

            // String(UNICODE)を出力したい文字コードのByte配列に変換
            cod = "EUC";
            if (cod == "JIS")
            {
                // UNICODEからJISへの変換
                dat = System.Text.Encoding.GetEncoding("ISO-2022-JP").GetBytes(uni);
            }
            else if (cod == "EUC")
            {
                // UNICODEからEUCへの変換
                dat = System.Text.Encoding.GetEncoding("EUC-JP").GetBytes(uni);
            }
            else if (cod == "UNICODE")
            {
                // UNICODEからUNICODEへの変換
                dat = System.Text.Encoding.GetEncoding("UNICODE").GetBytes(uni);
            }
            else if (cod == "UTF7")
            {
                // UNICODEからUTF7への変換
                dat = System.Text.Encoding.GetEncoding("UTF-7").GetBytes(uni);
            }
            else if (cod == "UTF8")
            {
                // UNICODEからUTF8への変換
                dat = System.Text.Encoding.GetEncoding("UTF-8").GetBytes(uni);
            }
            else
            {
                // UNICODEからSJISへの変換
                dat = System.Text.Encoding.GetEncoding("SHIFT-JIS").GetBytes(uni);
            }

            // 出力ファイルをバイナリ形式で出力
            sw = System.IO.File.Open("test2.txt",
                System.IO.FileMode.Create, System.IO.FileAccess.Write);
            bw = new System.IO.BinaryWriter(sw);
            bw.Write(dat);
        }
        catch (Exception ex)
        {
            throw ex;
        }
        finally
        {
            // ファイルのクローズ
            if (br != null) br.Close();
            if (bw != null) bw.Close();
            if (sr != null) sr.Close();
            if (sw != null) sw.Close();
        }
    }