文字コード
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