非IT企業に勤める中年サラリーマンのIT日記

非IT企業でしかもITとは全く関係ない部署にいる中年エンジニア。唯一の趣味がプログラミングという”自称”プログラマー。

C#: テキストファイルの文字コードを判別する方法(2) テキストファイルをバイト型配列に読み込む

      2016/06/11

広告

 

前回の記事からの続き
C#: テキストファイルの文字コードを判別する方法(1)

バイト型配列で読み込めば、先頭コードで文字形式を判別できるわけです。
 Shift-JIS:   130~152
 EUC:         161~207
 UTF-8:      194~239

厄介なのは、194~207はEUCとUTF-8とでオーバーラップしているため、この間は判別不可となります。UTF-8は2バイトと3バイト文字があり、これもまた厄介。すべて2バイトだったら1個飛ばしでチェックをかければいいのですが、2個飛ばしと3個飛ばしを切り替えなければならないからです。具体的には以下のとおりとなります。

 

次にテキストファイルの読み込み方法ですが、コードは以下のとおりとなります。
FileStream fs = new FileStream(“C:\test.txt”, 
           FileMode.Open, FileAccess.Read);
byte[] bs = new byte[fs.Length];
fs.Read(bs, 0, bs.Length);
fs.Close();

ここで、配列bsにテキストファイルのバイト型コードがセットされました。あとはループで文字コードを評価していけば良いわけです。以下が簡単な判別方法です。決定したらbreak;でループから外れましょう。

for(int i=0; i<bs.Length; i++){
  if(bs[i]>=130 && bs[i]<=152) //Shift-JISに決定
  if(bs[i]>=161 && bs[i]<=193) //EUCに決定

  if(bs[i]>=194 && bs[i]<=207) i++; //判別不能で次の先頭コードに
  if(bs[i]>=208 && bs[i]<=239) //UTF-8
}

次回は実際にコーディングしてみたいと思います。

 

 

 - C#応用編