0

私はこのコードを持っています:

DocumentBuilderFactory builderFactory =
            DocumentBuilderFactory.newInstance();
    DocumentBuilder builder = null;
    try {
        builder = builderFactory.newDocumentBuilder();
    } catch (ParserConfigurationException e) {
        e.printStackTrace();  
    }
    Document document = null;
    try {
        URL url = new URL("http://en.wikipedia.org/wiki/Charlie_Chaplin");

        //Reader reader = new InputStreamReader(url.openStream(),"UTF-8");
        document = builder.parse(url.openStream());
    } catch (SAXException e) {
        e.printStackTrace();
        return;
    } catch (IOException e) {
        e.printStackTrace();
        return;
    } 

処理しようとしたページで、次の例外が発生しました。

com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: 1 バイト UTF-8 シーケンスのバイト 1 が無効です。

ページを UTF-8 に変更するにはどうすればよいですか? または、これを解決できる他の方法はありますか?

4

1 に答える 1

1

XML パーサーで HTML を読み取ろうとしています。文字セットは問題の始まりにすぎません。

HTML 用の適切なパーサーが必要です。DOM のような構造が必要な場合は、http://jsoup.org/をお勧めします。テキストだけが必要な場合は、Apache Tika を使用できます。

XML パーサーに渡すことを主張する場合は、バイトをバッファーに読み取ってから、Tika の文字エンコーディング検出器を使用してエンコーディングを検出し、文字列に変換して、その文字列を DOM パーサーに渡すことができます。

于 2012-11-17T12:42:52.863 に答える