重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

javaサーブレット/jspで、ファイルのアップロード画面を
作っていますが、稀に文字化けしたファイルをアップして
こられる場合があることが判り、文字化けをチェックして、
文字化けしたファイルがアップされないように修正したい
と考えています。

ファイルはSJISのみと決めています。

文字化けのチェックは、どうようにやれば良いのでしょうか?

A 回答 (3件)

まぁよくある話ですよね。



これについては1バイトずつチェックするしかありません。(SJISのチェックはそういうものです)
チェックする方法もそれほどむつかしくありません。

簡単に書くとこんな感じです。
(1)1バイト読む
(2)バイトチェック
 - 1バイト文字だったら(1)に
 - そうでない場合は(3)に
(3)バイトチェック
 - SJISの1バイト目として適切な範囲の値であれば(4)に
 - ありえない値だったらエラー
(4)1バイト読む
(5)バイトチェック
 - SJISの2バイト目として適切な範囲の値であれば(1)に
 - ありえない値だったらエラー

実際には
1バイト目として適切な範囲の値でかつ
2バイト目として適切な範囲の値であってもNGになるパターンがあったと思います。
それは(5)のあとで個別にはじく必要があったと思います。

ググれば詳しい方法が見つかるでしょう。


・そんなに難しくない
・1文字ずつチェックするしかない
・範囲チェックを繰り返せばいい

という点だけわかればあとはすぐだと思います。
    • good
    • 0
この回答へのお礼

そうですか?
Perlなら、
use File::Slurp;
use ShiftJIS::String;
my $whole = read_file($up);
if (!issjis($whole)) {
# 文字化け
}

お礼日時:2009/02/25 18:23

Javaでは文字コード判別の関数は無いと思います。


自作するしかなさそうですね。
mibusys様の仰るとおり検索してみましょう。
↓のようなものはすぐに見つかりますよ。
http://amateras.sourceforge.jp/cgi-bin/fswiki/wi …
    • good
    • 0

かなり面倒だよね。


Javaでは読み込む時にエンコードを指定して(指定しなければサーバのデフォルト)で読み込んでしまうから。
今思い浮かぶのは
・コード表作って、バイト単位にチェックする
・Java以外でチェックさせる
・チェックはあきらめてJISAutoDetect指定してしまう
※JISAutoDetectはあまり推奨されてないです
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!