プロが教える店舗&オフィスのセキュリティ対策術

こんにちは。

現在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を変えるべきかどうか検討しております。
どのような意見でも構いませんので、よろしくお願いいたします。

A 回答 (3件)

Nutchを使ったことが無いのですが、


JavaMailで似たような現象があったので書いてみます。
もし何かのヒントにでもなれば幸いです。

インデックス化して表示ということは
検索ヒットしたページの一部を取り込んでいるのですよね?

もしここで、取り込んだデータに複数の文字コードが混在するなら、
検索結果で特定の1種類しか正常に表示できないのは当たり前のような気がします。

インデックスデータを作成する際に、文字コード変換して統一って
出来ないですかね…。
提示されたJSPでしたら、ブラウザ表示はUTF-8になるはずなので
Shift_JISのインデックスはUTF-8に変換…とか。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

貴方様の考えは良く分かりますが、一度私も同じように考え実験してみたところやはり関係ないように思えます。
というのはFedora core 6上でインデックスデータを作成し、それをコピーしてWindowsXP側のNutchのインデックスデータとしてプラウザからアクセスしてみましたが、
プラウザのエンコーディングはUTF-8でShift_JISのキャッシュのみ正常に表示されました。
つまり、クロールしてデータを取り込む際には特に問題は発生していないのだと思います。

OSによって正常に表示されるキャッシュの文字コードが変わってしまうことと、またFedora core 6の場合はSYSCONFIGの文字コードを変えることによって(例えばEUC-JPに設定した場合は正常に表示されるキャッシュが一つもない)キャッシュの表示が変わってしまうことから、やはりOS・OS側の設定等を疑っています。

とはいえヒントになるのではないかという好意、誠にありがとうございました。

お礼日時:2007/04/14 07:44

META要素を使用しなくてはいけないのでしょうか?


エンコードは3行めでを指定しているので、プロトコルレベルでクライアントに伝わると思います。

jspやServletでは必ずcharsetを指定するので、META要素を使うとかえって文字化けの原因になるような気がします。
    • good
    • 0
この回答へのお礼

度々ご指摘ありがとうございます。

METAタグは削除したり、別の文字コードを指定したりとすでに試しておりますが、どちらも失敗でした。

Mozdex.comがそうしているからというわけではございませんが、ソース表示を見て見たところMETAタグもあり、プラウザのソースから見れる部分はデフォルトのままでしたので、原因は別の所にあるのではないかと考えております。

お礼日時:2007/04/12 19:41

.jspファイルのエンコード指定の問題ではないでしょうか。



Nutchはデフォルトではエンコード指定がされていないので、.jspファイルの pageディレクティブを弄るといいかもしれません。

Fedora coreの標準文字コードが「UTF-8」、Windowsが「Shift_JIS」を拡張した「Windows-31J」である事からも、少しは説得力が有るのではないかと思います。

参考URL:http://lucene.apache.org/nutch/docs/jp/
    • good
    • 0
この回答へのお礼

早速の回答、誠にありがとうございます。
ですが、このように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">

お礼日時:2007/04/12 14:22

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