- ベストアンサー
javaでアップロード時、SJIS文字化け判定
javaサーブレット/jspで、ファイルのアップロード画面を 作っていますが、稀に文字化けしたファイルをアップして こられる場合があることが判り、文字化けをチェックして、 文字化けしたファイルがアップされないように修正したい と考えています。 ファイルはSJISのみと決めています。 文字化けのチェックは、どうようにやれば良いのでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
まぁよくある話ですよね。 これについては1バイトずつチェックするしかありません。(SJISのチェックはそういうものです) チェックする方法もそれほどむつかしくありません。 簡単に書くとこんな感じです。 (1)1バイト読む (2)バイトチェック - 1バイト文字だったら(1)に - そうでない場合は(3)に (3)バイトチェック - SJISの1バイト目として適切な範囲の値であれば(4)に - ありえない値だったらエラー (4)1バイト読む (5)バイトチェック - SJISの2バイト目として適切な範囲の値であれば(1)に - ありえない値だったらエラー 実際には 1バイト目として適切な範囲の値でかつ 2バイト目として適切な範囲の値であってもNGになるパターンがあったと思います。 それは(5)のあとで個別にはじく必要があったと思います。 ググれば詳しい方法が見つかるでしょう。 ・そんなに難しくない ・1文字ずつチェックするしかない ・範囲チェックを繰り返せばいい という点だけわかればあとはすぐだと思います。
その他の回答 (2)
- chomakichi
- ベストアンサー率57% (22/38)
Javaでは文字コード判別の関数は無いと思います。 自作するしかなさそうですね。 mibusys様の仰るとおり検索してみましょう。 ↓のようなものはすぐに見つかりますよ。 http://amateras.sourceforge.jp/cgi-bin/fswiki/wiki.cgi/free?page=%CA%B8%BB%FA%A5%B3%A1%BC%A5%C9%A4%CE%BC%AB%C6%B0%C8%BD%CA%CC
- OKwebb
- ベストアンサー率44% (92/208)
かなり面倒だよね。 Javaでは読み込む時にエンコードを指定して(指定しなければサーバのデフォルト)で読み込んでしまうから。 今思い浮かぶのは ・コード表作って、バイト単位にチェックする ・Java以外でチェックさせる ・チェックはあきらめてJISAutoDetect指定してしまう ※JISAutoDetectはあまり推奨されてないです
お礼
そうですか? Perlなら、 use File::Slurp; use ShiftJIS::String; my $whole = read_file($up); if (!issjis($whole)) { # 文字化け }