utf-16, utf-8, Shift_JIS に対応します。

前田稔の超初心者のプログラム入門

プログラムの説明

  1. 古くから使われていた Windows System の文字コードは MultiByte ですが、最近では Unicode(utf-16) や utf-8 が使われるようになり、対応出来なくなってきました。
    そこで Binary Viewer を utf-16, utf-8, Shift_JIS にも対応するようにバージョンアップします。
  2. 表示メニューに文字コードを指示するメニューを追加します。
    メニューをクリックしたときの「イベントハンドラー」も追加して下さい。
  3. utf-16(&6) : View の TEXT を utf-16 で印字します。
        private void utf16(object sender, EventArgs e)
        {
            edit.code = "utf-16";
            Invalidate();
        }
    
  4. utf-8(&8) : View の TEXT を utf-8 で印字します。
        private void utf8(object sender, EventArgs e)
        {
            edit.code = "utf-8";
            Invalidate();
        }
    
  5. Shift_JIS(&J) : View の TEXT を Shift_JIS で印字します。
        private void jis(object sender, EventArgs e)
        {
            edit.code = "Shift_JIS";
            Invalidate();
        }
    
  6. none : View の TEXT は印字しません。
    none は Binary File をテキストで印字すると、制御コードが含まれていて画面が乱れます。
    そこでテキストの印字を止めて、16進数の部分だけを印字します。
        private void none(object sender, EventArgs e)
        {
            edit.code = string.Empty;
            Invalidate();
        }
    
  7. class Edit に文字コード変換に使用する領域を追加します。
    using System.Text;
    
        public  string  code;   //文字コード
        Encoding enc;
    
  8. class Edit の Constructor で code に初期値を設定して下さい。
        public Edit()
        {
            pos = 0;
            code = string.Empty;
        }
    
  9. View(string str) を修正します。
    入力された Text を code で指示する文字コードから Encoding で utf-16 に変換します。
    文字コードの変換は str ⇔ Shift_JIS を参照して下さい。
    改行コード(\r,\n)を "." に置き換えます。
        public string View(string str)
        {
            int     i,j,k;
            byte[]  wt = new byte[16];
    
            str = "";
            for(i=0; i<leng; i+=16)
            {   j = leng-i;
                if (j > 16) j = 16;
                for(k=0; k<16; k++)  wt[k]= 0;
                for(k=0; k<j; k++)  wt[k]= byt[i+k];
                // オフセット
                k = (pos+i) / 2;
                str += k.ToString("X4");
                str += ": ";
                // 16進
                for(k=0; k<j; k++)
                {   str+= wt[k].ToString("X2");
                    if (k % 4 == 3) str += " ";
                }
                for(; k<16; k++)
                {   str += "  ";
                    if (k % 4 == 3) str += " ";
                }
                // 文字
                if (code == string.Empty)
                    str += "  ........";
                else
                {   str += "  ";
                    enc = Encoding.GetEncoding(code);
                    string wstr = enc.GetString(wt);
                    wstr = wstr.Replace("\r", ".");
                    wstr = wstr.Replace("\n", ".");
                    str += wstr;
                }
                str+= "  ";
                str+= "\r\n";
            }
            return str;
        }
    
  10. これで utf-16, utf-8, Shift_JIS に対応出来るはずです。
    Binary Viewer の文字コードが化けるときは、メニューから対応する文字コードを選んで下さい。

[Previous Chapter ↑] Edit Object Class

超初心者のプログラム入門(C# Frame Work)