• 締切済み

JSPの表示の際に日本語が文字化け

こんにちは。 現在Javaで書かれたNutchという検索エンジンプログラムをWindowsXPとFedore core 6、それぞれで動作実験しております。 大部分が正常に動作しているのですが、何故かcache.jspで、インデックス化したウェブサイトのキャッシュを表示する際に問題が発生してしまいます。 ■問題の詳細 WindowsXPをサーバとして別のWindowsXPからインターネットを通して表示しますと、Shift_JISで書かれたウェブサイトのキャッシュだけが正常に表示され、EUC-JPやUTF-8で書かれたウェブサイトのキャッシュは文字化けしてしまいます。 またFedora core 6をサーバとしてWindowsXPから表示しますと、UTF-8で書かれたウェブサイトのキャッシュだけが正常に表示され、EUC-JPやShift_JISで書かれたウェブサイトのキャッシュは文字化けしてしまいます。 なお2つのサーバ上にあるNutchは同じバージョンで、クライアントとして使用したWindowsXPも同じものです。クライアント側でのプラウザにはIE6・IE7・Opera・Firefox・NN等を使用しました。 これまで、Apache・Tomcat・Java-SDK・Nutchのバージョンを変えたり設定を色々変え実験しました。またcache.jspの内容を書き換えて実験しましたが、どれも失敗に終わってしまいました。 しかしhttp://www.mozdex.com/こちらのサイトでは、言語・文字コードに関わらず、正常にキャッシュを表示しております。 現在OSを変えるべきかどうか検討しております。 どのような意見でも構いませんので、よろしくお願いいたします。

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

みんなの回答

  • mahny
  • ベストアンサー率74% (57/77)
回答No.3

Nutchを使ったことが無いのですが、 JavaMailで似たような現象があったので書いてみます。 もし何かのヒントにでもなれば幸いです。 インデックス化して表示ということは 検索ヒットしたページの一部を取り込んでいるのですよね? もしここで、取り込んだデータに複数の文字コードが混在するなら、 検索結果で特定の1種類しか正常に表示できないのは当たり前のような気がします。 インデックスデータを作成する際に、文字コード変換して統一って 出来ないですかね…。 提示されたJSPでしたら、ブラウザ表示はUTF-8になるはずなので Shift_JISのインデックスはUTF-8に変換…とか。

masa1130
質問者

お礼

ご回答ありがとうございます。 貴方様の考えは良く分かりますが、一度私も同じように考え実験してみたところやはり関係ないように思えます。 というのはFedora core 6上でインデックスデータを作成し、それをコピーしてWindowsXP側のNutchのインデックスデータとしてプラウザからアクセスしてみましたが、 プラウザのエンコーディングはUTF-8でShift_JISのキャッシュのみ正常に表示されました。 つまり、クロールしてデータを取り込む際には特に問題は発生していないのだと思います。 OSによって正常に表示されるキャッシュの文字コードが変わってしまうことと、またFedora core 6の場合はSYSCONFIGの文字コードを変えることによって(例えばEUC-JPに設定した場合は正常に表示されるキャッシュが一つもない)キャッシュの表示が変わってしまうことから、やはりOS・OS側の設定等を疑っています。 とはいえヒントになるのではないかという好意、誠にありがとうございました。

  • potko
  • ベストアンサー率53% (43/81)
回答No.2

META要素を使用しなくてはいけないのでしょうか? エンコードは3行めでを指定しているので、プロトコルレベルでクライアントに伝わると思います。 jspやServletでは必ずcharsetを指定するので、META要素を使うとかえって文字化けの原因になるような気がします。

masa1130
質問者

お礼

度々ご指摘ありがとうございます。 METAタグは削除したり、別の文字コードを指定したりとすでに試しておりますが、どちらも失敗でした。 Mozdex.comがそうしているからというわけではございませんが、ソース表示を見て見たところMETAタグもあり、プラウザのソースから見れる部分はデフォルトのままでしたので、原因は別の所にあるのではないかと考えております。

  • potko
  • ベストアンサー率53% (43/81)
回答No.1

.jspファイルのエンコード指定の問題ではないでしょうか。 Nutchはデフォルトではエンコード指定がされていないので、.jspファイルの pageディレクティブを弄るといいかもしれません。 Fedora coreの標準文字コードが「UTF-8」、Windowsが「Shift_JIS」を拡張した「Windows-31J」である事からも、少しは説得力が有るのではないかと思います。

参考URL:
http://lucene.apache.org/nutch/docs/jp/
masa1130
質問者

お礼

早速の回答、誠にありがとうございます。 ですが、このようにUTF-8でエンコード指定はしているつもりです。 なお、Metaタグの後にキャッシュが表示されます。 <%@ page session="false" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" import="java.io.*" import="java.util.*" import="org.apache.nutch.searcher.*" import="org.apache.nutch.parse.ParseData" import="org.apache.nutch.metadata.Metadata" import="org.apache.nutch.metadata.Nutch" import="org.apache.hadoop.conf.Configuration" import="org.apache.nutch.util.NutchConfiguration" %><% Configuration nutchConf = NutchConfiguration.get(application); NutchBean bean = NutchBean.get(application, nutchConf); request.setCharacterEncoding("UTF-8"); bean.LOG.info("cache request from " + request.getRemoteAddr()); Hit hit = new Hit(Integer.parseInt(request.getParameter("idx")), Integer.parseInt(request.getParameter("id"))); HitDetails details = bean.getDetails(hit); String id = "idx=" + hit.getIndexNo() + "&id=" + hit.getIndexDocNo(); String language = ResourceBundle.getBundle("org.nutch.jsp.cached", request.getLocale()) .getLocale().getLanguage(); Metadata metaData = bean.getParseData(details).getContentMeta(); String content = null; String contentType = (String) metaData.get(Metadata.CONTENT_TYPE); if (contentType.startsWith("text/html")) { String encoding = (String) metaData.get("CharEncodingForConversion"); if (encoding != null) { try { content = new String(bean.getContent(details), encoding); } catch (UnsupportedEncodingException e) { content = new String(bean.getContent(details), "windows-1252"); } } else content = new String(bean.getContent(details)); } %> <!-- <base href="<%=details.getValue("url")%>"> --> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

関連するQ&A

  • JSPでincludeファイルの日本語が文字化けします。

    tomcat3.1を使用しています。 JSP本体でcharset=Shift_JISを設定し、SJISコードで記述した文字は正常に表示されますが、 <%@ include file="file.html" %>にて読み込んだfile.htmlに記述した日本語が文字化けします。 file.htmlが文字化けしないようにする方法を教えてください。

  • 文字コードでなる文字化けの直し方お願いします。

    海外のWEBHOSTサーバーの WE○NGというところを使っているのですが。 HTMLの記述で charset="Shift_JIS" とすると日本語が文字化けします。 Shift_JIS を EUC-JP iso2022-jp UTF-8 ASCII と色々変えてみても、全部日本語が文字化けしました;; 文字化けにならない、日本語が表示されるにはどうしたらよいでしょうか。 お知りの方 よろしくお願いします。

  • jspの文字化けについて

    javaでDBから取得したデータをjspで表示する際に 文字化けしてしまいます。化けるのは「~」です。 ちなみに文字コードはshift_JISです。 jspにcontentTypeなども記述してあるし、 色々なサイトを検索して、様々な方法を試したのですが・・。 どなたかご教授お願いします。

    • ベストアンサー
    • Java
  • HTMLの文字化けについて

    HTMLの文字化けについて クライアントPC(WindowsVista)で作成したHTMLファイルをサーバ(CentOS5.4)にアップして、ブラウザから確認してみたところ、文字化けを起こしてしまいました。 ローマ字は問題ないのですが、日本語が文字化けしてしまっており、表示がめちゃくちゃになってしまっています。 HTMLはK2Editorにて作成して、文字コードはShift-JIS、改行コードはCRLFとしております。 しかし、文字化けした状態でブラウザの文字エンコーディングをEUC-JPに変えて再度読み込んでみたところ、文字化けせずに表示されます。 サーバ側の文字コードは、 # vi /etc/sysconfig/i18n LANG="ja_JP.EUC-JP" と設定し、デフォルトのUTF-8からEUC-JPに変えております。 なので、もしかしたらサーバ側の文字コードとHTMLの文字コードが何か関係しているのかと私は思うのですが・・・ 文字化けの原因がお分かりになる方いらっしゃいましたら、ご教授のほどお願い致します。

    • ベストアンサー
    • HTML
  • FTPの文字化けについて

    サーバOSにWindows7、サーバソフトにfreesshdを利用して SFTP接続環境を作りました。 クライアントソフトを試してみたのですが、 ALFTP→接続は成功するものの、ディレクトリが表示されない。 Filezzila→文字化け となり、正常に接続できません。 Filezzilaは文字セットを色々変えてみたのですが、 ・UTF-8を強制→x ・カスタム文字セットを使用→SJIS、UTF-8、SHIFT_JIS→いずれもX 当方の環境ではFilezillaが最も高速転送できるため、 可能であればクライアントソフトに固定したいと考えています。 文字化けの解消方法をご教授いただければ幸いです。

  • wordpressがMySQLに日本語データを格納する際の文字コード

    初めまして、satsukimaと申します。 現在他のブログからの引越し作業を行うべく、wordpressのインストールを終えました。 そして別のブログサイトからのテキストデータをMySQLに流し込もうとしています。 ところが日本語の部分にのみ文字化けが発生してしまいます。 wordpressではMySQLに日本語データを格納する際、どのような文字コードを使っているのでしょうか? 以下の5点を試しました。 1.utf8の端末でMySQLのCLI(mysql client)から"insert into"コマンドを使ってデータを追加しましたが、CLIのselect文とブラウザの両方で確認したところ日本語部分で文字化けが発生します。 2.ブラウザから通常通りに管理画面より日本語の入力を行うと文字化けせずに正常にブラウザに表示されます。 3.しかし正常にブラウザに表示されるデータをCLIのselect文にて確認すると文字化けが発生します。CLI端末の文字コードをutf8、euc、shift-jis、iso-2022-jpで試しましたが、やはり「?????」といったような文字列が表示され、文字化けします。 4.MySQL Query Browserからselect文を実行すると、ブラウザ上で正しく表示されているデータは正常に表示されます。 5.自分で書いたPHPスクリプトでselectを実行しブラウザから表示させると、文字化けします。ブラウザの文字コードをutf8、euc、shift-jis、iso-2022-jpで試しましたが、文字化けします。 どなたかヒントでも頂けないでしょうか。 ぜひ宜しくお願い致します。

    • ベストアンサー
    • PHP
  • LinuxでのJSPによるXML文書表示の際の文字コードについて

    Windowsで作ったXML操作のJSP(Servletと連携してます)を、Linuxのサーバー において、動作させたいと思っています。 Linuxは全く初めてなので、教えていただきたいのですが。。 XMLを再帰処理で読みこんで、ツリー構造で表示するところが、Windowsだと エラーなくできるのですが、Linuxだとjspの再帰処理の部分でソースコードのエラー (try{}catch{}の}が閉じられていないなどの)エラーになってしまいます。 Windowsのソースコードのままなので、"}"が閉じられていないというのは考えにくいので、 おそらく文字化けのエラーだと思っています。 jspのディレクティブのところは、"Shift_JIS"の部分を"EUC-JP"に変えて <%@ page pageEncoding="EUC-JP" contentType="text/html; charset=EUC-JP" ・・・・%> としたんですが、これだけでは足りないでしょうか? 再帰処理の表示のところでも、文字コードの設定が必要とか。。。 あと、画面で入力された文字はWindowsだとメソッド内で new String(string.getBytes("8859_1"), "Shift_JIS").trim(); としているんですが、"Shift_JIS"を"EUC_JP"に変えるとして、"8859_1"の部分は 変えなくて良いでしょうか?? 初歩的な質問ばかりですみません。。Linuxのことを詳しく書いてある本が会社になくて、 (Linuxの本はあっても、肝心の知りたいことが書いてなかったりするので) できればLinuxでjavaを扱うサイトやLinuxでXMLを扱うオススメのサイトを知っていたら、ぜひぜひ教えてほしいのですが☆ よろしくお願いします。

    • ベストアンサー
    • Java
  • EclipseでのJSP・Servlet開発について(文字化け)

    EclipseでJSP、Servletの開発をしております。 文字化けについての質問なのですが、ブラウザ上で表示される文字が 文字化けしてしまいます。JSPの頭に <%@page contentType="text/html; charset=SHIFT_JIS"%> と入れており、ブラウザでもエンコードはShift_JISとなっています。 自分なりに原因を調べたのですが、○○.jsp→○○_jsp.javaに変換?する際に 文字化けしているようで、Eclipse上でJSP、Servletを見ると普通なのですが、 ○○_jsp.javaは見事に文字化けしていました。 文字化けした○○_jsp.javaを削除して再度表示(_jsp.javaの再作成)も試みた のですが、同じ結果でした。 1ヶ月以上触っていないパッケージのソースも突然文字化けを起こしたので 原因も分からない状態です。 原因・直し方がお分かりの方、是非ともご指南下さい。 情報不足でしたら追記させて頂きますので、どうぞ宜しくお願い致します。

    • ベストアンサー
    • Java
  • SSI 文字化けしてしまう

    SSIで日付を表示するため、shtmlファイルに<!--#echo var="DATE_LOCAL" --> を入れたのですが、shtmlの文字コードをUTF-8にして保存すると文字化けしてしまいます。 SHIFT-JISで保存すれば正常に表示されるのですが、UTF-8で保存しても正しく表示できるようにするにはどうしたらよいのでしょうか?  ちなみにサーバーはApache 2.0.63です

  • JSP の文字化け

    はじめまして。 Linux(RedHat7.2) 上で Tomcat を動かしていたときは、正常に動作していたのですが...。 Windows (W2K) に Tomcat をインストールして動作させてみると、JSPの日本語(全角文字)が文字化けしてしまいます。 現象は、日本語の部分が "?" で表示されてしまいます。 どうやら、JSP に直接書いてある全角文字は大丈夫のようですが、Bean 内に定義されている全角文字が化けるようです。 Linux上でも、Windows上でも、正常に全角文字をJSPに表示させたいのですが、何か良い対策方法はないでしょうか? ちなみに、両方とも Tomcat のバージョンは 4.01 です。 以上ですが、よろしくお願いします。