文字コードがShift JISかEUC-JPのどちらなのか判別する方法について。 およびC#による実装。
文字コードのマップ
下図の黄色の領域がShift JISの文字コードで取り得る範囲、青色の領域がEUC-JPの文字コードで取り得る範囲。 文字がこのどちらに属するか調べることで文字コードを判別する。 灰色の領域はASCII文字、緑色の領域はShift JIS、EUC-JPともに取り得る領域で、この範囲の文字では文字コードがどちらなのか判別できない。
この図にはEUC-JPの3バイト文字は含まれていない。
C#での実装
ソースの概要
- ストリームの先頭から1バイトずつ読み込み、文字コードのマップに照らし合わせる
- 文字コードが判別出来た場合は、Shift JISかEUC-JPのEncodingを返す
- 文字コードが判別出来なかった場合はEncoding.ASCIIを返す
- EUC-JPの3バイト文字が含まれていた場合は考慮していない