2

私は、Java で書かれた Web クロール ソフトウェアを持っています。このソフトウェアは、特定の Web サイトを通過してデータを収集します。ここまでは順調ですね。簡単にするために JSoup API を使用していますが、それは関係ありません。私の問題はエンコーディングにあります。

サーバー上で Jar ファイルを実行すると (java -jar Crawler.jar を使用)、á、é などの国際的なアクセント記号を含めて、データが完全にキャプチャされます。ただし... crontabでスケジュールすると、基本的でないすべての文字が台無しになります! ここで何が問題になる可能性がありますか?私は本当に途方に暮れています、答えは本当に私の肌を救うでしょう.

編集-友人は、次のコードを使用して、Cronで実行されているロケールをチェックアウトすることを提案しました:

    */1 * * * * locale > /home/user/locale.ouput

私はそうしましたが、crontab は UTF-8 であるシステム設定とは対照的に、POSIX ロケールを使用しているようです。UTF-8に変更する方法を見ていきます。ヒントをいただければ幸いです。

4

2 に答える 2

8

バイトを文字に変換するとき、または文字から変換するときは常に、文字エンコードを明示的に設定してください。たとえば、Stringコンストラクターでは、String.getBytes()、InputStreamReaderコンストラクターなどです。

それでも不十分な場合は、Javaを起動する前に、crontab内でLANG環境変数を別の値に設定してみてください。たとえば、

LANG=en_US.UTF-8
于 2012-06-23T20:31:45.737 に答える
0

わかりましたので、本番サーバーでこれをテストしている場合は、ssh などを使用してリモートで実行し、ターミナル エミュレーターで結果を表示していると思います。

Java は明らかに Unicode なので、これは unicode-ascii の問題のように聞こえます。サーバーがこれらをテキスト ファイルに書き込んでいる場合、出力エンコーディングと端末でのレンダリング方法との間に何らかの不一致がある可能性があります。

ファイルに書き込むように設定している場合は、最初に別の端末エミュレーターを試して、テキストが非 Unicode エミュレーターによって文字化けしていないことを確認します。それが問題でない場合は、ファイル自体の文字エンコーディングを再確認し、ソフトウェアに何らかの隠れた問題がないことを確認してください。

理想的には、物理​​サーバーで tty を開き、出力と文字エンコーディングをそのように表示するだけですが、これが常に便利または可能であるとは限りません。

テキストの文字化けで同様の問題が発生しましたが、ほとんどの場合、端末エミュレータの問題に帰着します。

于 2012-06-23T20:19:31.787 に答える