0

ここで問題を解決するのに役立つのは、スクリプトがインターネットを検索して保存することですが、彼はそれらを間違ったエンコーディングで保持しています.UTP-8に、プログラムコーディングに挿入できる場所をここに挿入してください(ページが保存されたら、その内容も文字化けしています)

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.net.URL;
import java.net.URLConnection;
import java.util.Scanner;


public class url{
  public static void main(String[] args) {
        try {
            URL PageUrl;
            URLConnection GetConn = null;
            GetConn = null;
            Scanner sc = new Scanner(new File("C:\\test\\url.txt")); 
            String htmlPage;
            while (sc.hasNext()){
                htmlPage = sc.nextLine();
                PageUrl = new URL(htmlPage);
                GetConn = PageUrl.openConnection();
                GetConn.connect();
                // establish connection:
                Scanner scUrl = new Scanner(GetConn.getInputStream());

                StringBuffer sb = new StringBuffer();
                while(scUrl.hasNext()){
                    sb.append(scUrl.nextLine());
                }
                scUrl.close();

                String htmlFileName = ("C:\\test\\1\\"+title(sb.toString())+".html");
                FileWriter FWriter = new FileWriter(htmlFileName);
                BufferedWriter BWriter = new BufferedWriter(FWriter);

                BWriter.write(sb.toString());
                BWriter.close();
            }// end try
            sc.close();
        }
        catch (IOException io) {
            System.out.println(io);
        }
    }

    private static String title(String str){

        return str.substring(str.indexOf("title>")+6, str.indexOf("</title>"));
    }

}
4

2 に答える 2

2

これ

new Scanner(GetConn.getInputStream());

Web ページから入力ストリーム (バイト指向) を取得します。ただし、JVM のデフォルトのエンコーディングを使用しており、実際のページ自体のエンコーディングは見ていません。

おそらく、JTidyのようなライブラリを使用して HTML を正しくデコード/解析し、ページ タイトルを尋ねます。上記のコードは、非常に壊れやすい可能性があります。

于 2012-11-20T11:29:37.910 に答える
1

@Brian Agnewの答えを追加するには-
私が知る限り:

new Scanner(GetConn.getInputStream(),"UTF-8");
于 2012-11-20T11:31:30.487 に答える