• ベストアンサー

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

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

  • Java
  • 回答数3
  • ありがとう数1

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

  • ベストアンサー
  • 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はあまり推奨されてないです

関連するQ&A

  • サーブレットの文字化け

    こんにちは。 JAVAサーブレット時の文字化けで困っています。 環境 ≪サーバー≫ OS:Linux Tomcat4.1.31 JAVA1.4.2 ≪クライアント≫ OS:Windows2000 クライアントからhttp:192.168.X.X:8080/xxx.jspを呼び出して実行しています。 JSPファイル(Shift-JISで保存)からサーブレットを呼び出して サーブレットでrequest.getParameterをした時に、日本語が文字化けしてしまいます。 JSPファイルでは <%@ page language="java" contentType="text/html; charset=Windows-31J" pageEncoding="Windows-31J"%> を指定しています。 なにかわかりましたら教えてください。 よろしくお願いします。

    • ベストアンサー
    • Java
  • servletからjspへの遷移時に文字化け

    質問します。 用件:servletからjspに遷移する際に文字化けが発生します。 環境: Eclipse3.7 java6 ApacheTomcat7.0 フレームワークはなし 内容: フォワードでTest.jspに遷移します。 RequestDispatcher requestdispatcher = request.getRequestDispatcher("/Test.jsp"); requestdispatcher.forward(request, response); Test.jspに遷移すると、Test.jspの「<body>テスト</body>」がブラウザ表示時に文字化けします。 (英数字は化けません。) servletを使用せず、Test.jspに直接アクセスすると文字化けが起きません。 servletで、Test.jspで適当なhiddenを作成し、servletでgetParameterをSystem.out.printしても 文字化けなどはおきません。 また、RequestDispatcherでは文字化けが起こりますが、 response.sendRedirect("/Test.jsp"); だと文字化けがおきません。 現状、sendRedirectとsessionを使用して値の受け渡しを行っておりますが、 RequestDispatcherを使用したいので困っております。 また文字コードは javaファイルそのものはSJIS jspは<%@ page language="java" contentType="text/html; charset=SJIS" %> となっております。 わかりにくい文章で申し訳ありませんが、ご回答の程よろしくお願いします。

    • ベストアンサー
    • Java
  • ファイルアップロード時の文字化けについて

    ファイルアップロード時の文字化けについて いつもお世話になります。 tomcatでWEBアプリを作っています。 enctypeをmultipart/form-dataのPOST通信でファイルアップロードする際、inputのtypeがfileだけでなくtextやhiddenなどのデータもリクエストを上げたいのですが、そのデータに日本語があると文字化けしてしまいます。 Servlet側では、setCharacterEncodingでWindows-31Jを指定しており、getInputStreamを分解して取得するようにしています。いろいろ調べてみたのですがなぜこうなるのかが分かりません。なぜ文字化けしてしまうのでしょうか。どのように対処を行えばよいでしょうか。 ※開発環境 サーブレットコンテナ:tomcat OS:Windows eclipse3.5.2で開発してます。 宜しくお願いします。

    • ベストアンサー
    • Java
  • sjisでの文字化け?

    フォームに文章を入力し内容を送信するCGIを組んだのですが、送信内容の確認画面において文字化けが生じました。 よく聞く「表示」などの文字化けとは違う文字で、「欲求不満」「早苗」などで発生しています。 ただ、「欲求」「不満」「早」「苗」では文字化けせず、「求不」「早苗」という単語になって初めて文字化けするようです。 送信内容はsjisに変換して処理しています。 これはどういったことが原因で発生するのでしょうか? 原因と解決法を御教示いただけたらと思います。

    • ベストアンサー
    • Perl
  • SJIS→EUCに送っても文字化けしない

    htmlは、SJISで作っています。 PHPは、EUCで作っています。 普通は文字化けをするため、mb_convert_encoding関数を用いますが、 なぜか、この関数を使わなくても、文字化けしません。 友人は、有り得ないと言います。 事実、友人PCではmb_convert_encoding関数で文字化けを直してました。 私も友人に同感で、SJIS→SJISやEUC→EUCなら文字化けしないけど、文字コードが違うのです。違うから、mb_convert_encoding関数を使うと、思っているのですが‥‥ 設定が違うのかと思い、友人の、php.iniなどいくつかのファイルを私のPCに上書きしてもらいましたが、変わりませんでした。 こういうことってあるのでしょうか? 文字化けしないなら、mb_convert_encoding関数を使わなくて良いので、楽だと思いましたが・・・ 何かの不具合なら、いざ完成した時、またmb_convert_encoding関数をいれる手間がありますし、どうしようか迷っています。 本には、「文字化けしない場合もある」という記述は一言も書いてありませんでした。 逆に、「文字化けするからmb_convert_encoding関数を用いる」と大きく書いてあるぐらいです。 何かの設定なのでしょうか? ソフトのバージョンも、同じでした。不思議です。

    • ベストアンサー
    • PHP
  • 文字化け

    文字化け ユーチューブで「高度な動画ファイル アップロード」するためjavaをインストールし使えましたが文字化け?を起こしてしまい不便です これを直すにはどうすればよいでしょう? よろしくお願いします

  • 【Redhat】SJISにおける文字化け

    OS:Redhat Linux ES 4.6 文字コードをSJISにしてファイルを表示しますと、特定の日本語文字(例えば、II)が 文字化けしてしまいます。 何が原因なのでしょうか。。。

  • javaで日本語が文字化けしてしまいます。eclipseからjavaク

    javaで日本語が文字化けしてしまいます。eclipseからjavaクラスを実行する場合、どのようなencodingの式を記述すればいいでしょうか? コマンドプロンプトでjavac -encoding SJIS クラス名.javaと入力すれば日本語の文字化けを解決できますがeclipseからの実行で日本語文字化けを避けられません。 コードを記述するのだと思いますが、どのように記述すればいいのでしょうか? eclipseの設定で文字コードを変更できるみたいですが、SJISには変更できませんでした。 何か解決策はないでしょうか? よろしくお願いします。

    • ベストアンサー
    • Java
  • 文字化け対処法

    JAVAサーブレットをやってます。 フォームに入力したデータをファイルへ保存するとき。 全角文字が含まれると文字化けが起こってしまいます。 HTMLの表示の時も文字が化けたり化けなかったりすることがあるのですが・・・。 どうすれば文字化けを防ぐ事ができますか?

    • ベストアンサー
    • Java
  • MySQLの文字化け

    Win XP MySQL4.0.13 TOMCAT4.1 APACHE2 以上を使用して自宅にて開発を行っております。 HTMLページより入力されたデータをjspファイルへ渡し、jspファイル内へ記述されたSQL文によりデータベースへの書き込みを試みております。 データベースへの書き込み自体はできるのですが、文字化けで困っています。 書き込み後、プロンプトよりselect文で確認すると、日本語のみ文字化けし、アルファベットは大文字が小文字にところどころなってしまいます。数字は問題ありませんでした。 具体的には「あいうえお」が「BDFHJ」に文字化けしていました。 MySQLのコンソールのMY.ini Setuoタブに [mysqld] default-character-set=sjis [mysql] default-character-set=sjis と指定しており、HTML,jspファイル内でもshift-jisを指定しております。 ご教授よろしくお願いしたします。

    • ベストアンサー
    • MySQL