0

ここに入力する前に他のスタックを検索しましたが、同様のものは見つかりませんでした。次のようなテキストを含むさまざまなutf-8 Webページをスクレイピングする必要があります

「Oggi è una bellissima giornata」

問題は文字「è」にあります

このテキストを jtidy および xpath クエリ式で抽出し、次のように変換します

byte[] content = filteredEncodedString.getBytes("utf-8");
String result = new String(content,"utf-8");

ここで、filteredEncodedString には、「Oggi è una bellissima giornata」というテキストが含まれています。この手順は、これまでに分析されたほとんどの Web ページで機能しますが、場合によっては utf-8 文字列を抽出しません。テキストが類似しているため、ページのエンコードは常に同じです。

9月14日編集

utf-8エンコーディングでページを取得するために、コードを次のように変更しました。

URL url = new URL(currentUrl);
        URLConnection conn = url.openConnection();
        conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-GB; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13 (.NET CLR 3.5.30729)");
        BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream(), getEncode()));

        String line="";
        String domString="";
        while((line = in.readLine()) != null) {
            domString+=line.toString();
        }

        byte[] bytes = domString.getBytes("UTF-8");
        in.close();

        return bytes;
        //return text.getBytes();

ここで、getEncode()はページ エンコーディング (この場合は utf-8) を返します。しかし、私はまだ ì または é が正しく読み取られていないことに気付きました。このコードに何か問題がありますか?再度、感謝します!

10月2日編集

このコードはうまくいくようです。問題は、私が投稿しなかった Dom ドキュメントの作成 (これについては申し訳ありません!) にあり、上記のメソッドからバイトが返されました。

4

2 に答える 2

1

事後に String を utf-8 に「変換」することはできません。バイトが誤って char に変換された場合、データはすでに失われています。

于 2012-09-11T15:54:39.233 に答える
0

ページを文字列ではなくバイト配列として取得してから、StringUtilsを使用して utf-8 文字列に変換することができます。

于 2012-09-11T17:45:40.847 に答える