NonSoft

文字コード判定のサンプル(VB6/VB.NET)の概要


 ち〜な〜み〜に〜

文字コード判定のサンプル(VB6)の概要
文字コード判定のサンプル(VB.NET)の概要
文字コード判定のサンプル(VB6)は以下の流れで文字コードを判定しています。
100%完璧な文字コード判定は難しいですが出来るだけ精度の高い判定を目指しています。

1.JIS(ISO-2022-JP)判定
  以下の制御コード列が存在したらJIS(ISO-2022-JP)と判定とする。
  ・&H1B, &H28, &H42 (ASCII)
  ・&H1B, &H28, &H4A (JISローマ字)
  ・&H1B, &H28, &H49 (JISカナ字)
  ・&H1B, &H24, &H40 (旧JIS漢字)
  ・&H1B, &H24, &H42 (新JIS漢字)
  ・&H1B, &H24, &H44 (JIS補助漢字)
  存在しなければ他の文字コードと判定する。

2.UNICODE判定
  以下の制御コード列が存在したらUNICODEと判定とする。
  ・&HFF, &HFE (BOM:UNICODEを示すコード)
  存在しなければUNICODEの可能性を確率として計算する。
  ・2バイト目が&H00の時は2点加算(1バイト目は判定しない)
  ・2バイト目が&H01〜&H33の時は2点加算(1バイト目は判定しない)
  ・2バイト目が&H34〜&H4Dの時は0点として判定終了
  ・2バイト目が&H4E〜&H9Fの時は2点加算(1バイト目は判定しない)
  ・2バイト目が&HA0〜&HABの時は0点として判定終了
  ・2バイト目が&HAC〜&HD7の時は0点として判定終了
  ・2バイト目が&HD8〜&DFの時は2点加算(1バイト目は判定しない)
  ・2バイト目が&HE0〜&F7の時は0点として判定終了
  ・2バイト目が&HF8〜&FFの時は2点加算(1バイト目は判定しない)

  計算結果の点数をチェックしたバイト数の2倍で割り確率%を計算する。
  全てが複数バイトコードなので100%になる。UNICODEでは無いと判定した時は0%になる。

3.UTF-8判定
  以下の制御コード列が存在したらUTF-8と判定とする。
  ・&HEF, &HBB, &HBF (BOM:UTF-8を示すコード)
  存在しなければUTF-8の可能性を確率として計算する。
  ・1バイト目に&HFCのビットが立っていて2〜6バイト目が&H80〜&HBFの時はバイト数(この場合は6バイト)の2倍の点数を加算
  ・1バイト目に&HF8のビットが立っていて2〜5バイト目が&H80〜&HBFの時はバイト数(この場合は5バイト)の2倍の点数を加算
  ・1バイト目に&HF0のビットが立っていて2〜4バイト目が&H80〜&HBFの時はバイト数(この場合は4バイト)の4倍の点数を加算
  ・1バイト目に&HE0のビットが立っていて2〜3バイト目が&H80〜&HBFの時はバイト数(この場合は3バイト)の2倍の点数を加算
  ・1バイト目に&HC0のビットが立っていて2バイト目が&H80〜&HBFの時はバイト数(この場合は2バイト)の2倍の点数を加算
  ・1バイト目が&H00〜&H7Fの時は1点加算
  計算結果の点数をチェックしたバイト数の2倍で割り確率%を計算する。全てが複数バイトコードの場合は100%、
  全てが半角コードの場合は50%になる。(複数バイトコードが一致した時は確率が高くなる)

4.UTF-7判定
  UTF-7の可能性を確率として計算する。
  ・'+'〜'-'の間にBASE64文字が存在する時は'+'〜'-'のバイト数の2倍の点数を加算
   BASE64=(ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/)
  ・1バイト目が&H00〜&H7Fの時は1点加算(最後の文字の余分な付加ビットが0で無ければ無効)
  計算結果の点数をチェックしたバイト数の2倍で割り確率%を計算する。全てが複数バイトコードの場合は100%、
  全てが半角コードの場合は50%になる。(複数バイトコードが一致した時は確率が高くなる)

5.SJIS判定
  SJISの可能性を確率として計算する。
  ・1バイト目が&H81〜&H9F、&HE0〜&HEFで2バイト目が&H40〜&H7E、&H80〜&HFCの時はバイト数(この場合は2バイト)
   の2倍の点数を加算
  ・1バイト目が&HA1〜&HDFの時は1点加算
  ・1バイト目が&H00〜&H7Fの時は1点加算
  計算結果の点数をチェックしたバイト数の2倍で割り確率%を計算する。全てが複数バイトコードの場合は100%、
  全てが半角コードの場合は50%になる。(複数バイトコードが一致した時は確率が高くなる)

6.EUC判定
  EUCの可能性を確率として計算する。
  ・1バイト目が&H8Eで2バイト目が&HA1〜&HDFの時はバイト数(この場合は2バイト)の2倍の点数を加算
  ・1バイト目が&H8Fで2、3バイト目が&HA1〜&HFEの時はバイト数(この場合は3バイト)の2倍の点数を加算
  ・1バイト目が&HA1〜&HFEで2バイト目が&HA1〜&HFEの時はバイト数(この場合は2バイト)の2倍の点数を加算
  ・1バイト目が&H00〜&H7Fの時は1点加算
  計算結果の点数をチェックしたバイト数の2倍で割り確率%を計算する。全てが複数バイトコードの場合は100%、
  全てが半角コードの場合は50%になる。(複数バイトコードが一致した時は確率が高くなる)

7.各文字コードの確率を比較し文字コードを判定する。