• ベストアンサー

javaでアップロード時、SJIS文字化け判定

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

質問者が選んだベストアンサー

  • ベストアンサー
  • mibusys
  • ベストアンサー率60% (18/30)
回答No.2

まぁよくある話ですよね。 これについては1バイトずつチェックするしかありません。(SJISのチェックはそういうものです) チェックする方法もそれほどむつかしくありません。 簡単に書くとこんな感じです。 (1)1バイト読む (2)バイトチェック  - 1バイト文字だったら(1)に  - そうでない場合は(3)に (3)バイトチェック  - SJISの1バイト目として適切な範囲の値であれば(4)に  - ありえない値だったらエラー (4)1バイト読む (5)バイトチェック  - SJISの2バイト目として適切な範囲の値であれば(1)に  - ありえない値だったらエラー 実際には 1バイト目として適切な範囲の値でかつ 2バイト目として適切な範囲の値であってもNGになるパターンがあったと思います。 それは(5)のあとで個別にはじく必要があったと思います。 ググれば詳しい方法が見つかるでしょう。 ・そんなに難しくない ・1文字ずつチェックするしかない ・範囲チェックを繰り返せばいい という点だけわかればあとはすぐだと思います。

guci-ok
質問者

お礼

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

その他の回答 (2)

回答No.3

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)
回答No.1

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