TEST

文字コード

SJIS

 protected final InputStream transform(
   final InputStream in, final String[] convertTable
 ) throws IOException {
   logger.dump("SJIS判定処理開始");
   // 格納用変数の生成
   StringBuilder sb = new StringBuilder();
   int code = 0;
   int wideChar = 0;
   // 判定フラグ
   boolean isWideCharMode = false;
   while ((code = in.read()) > -1) {
     // 読み込んだ文字数分繰り返します
     if (isWideCharMode) {
       // 読んだのが2byte文字の2byte目の場合
       wideChar += code;
       // 文字コード変換表格納Arrayから変換後のコードを取得してsbに格納する。
       if (convertTable[wideChar] == null) {
         convertTable[wideChar] = QUESTION;
       }
       sb.append(convertTable[wideChar]);
       // 再び判定を行うためにフラグをfalseにする。
       isWideCharMode = false;
       continue;
     }
     if (code < BORDER_CHAR) {
       // 読んだのが1byte文字の場合
       // 文字コード変換表格納Arrayから変換後のコードを取得してsbに格納する。
       if (convertTable[code] == null) {
         convertTable[code] = QUESTION;
       }
       sb.append(convertTable[code]);
       isWideCharMode = false;
     } else if (
       (code >= BORDER_KANA_MINI) && (code <= BORDER_KANA_MAX)
     ) {
       // 読んだのが半角カナの場合
       // 文字コード変換表格納Arrayから変換後のコードを取得してsbに格納する。
       if (convertTable[code] == null) {
         convertTable[code] = QUESTION;
       }
       sb.append(convertTable[code]);
       isWideCharMode = false;
     } else {
       // 読んだのが2byte文字の1byte目の場合
       // 1byte目に256をかけます
       wideChar = code * BYTE2;
       // 2byte文字の2byte目にする為にフラグをtrueにする
       isWideCharMode = true;
     }
   }
   logger.dump("SJIS判定処理終了");
   // System.out.println(sb.toString());
   // 読み込んでUTF-16に変換した文字列をConvertResultにセットします
   logger.dump("セットする値=" + sb.toString());
   setSjisConvertResult(sb.toString());
   // UTF-16に変換して返却
   return new ByteArrayInputStream(sb.toString().getBytes("UTF-16"));
 }
最終更新:2008年04月09日 10:28