2016-08-31 5 views
0

私はこの質問を短くて甘いものにします。私は、URLを文字列として読み込み、WebページのHTMLソースの文字列を返す関数を持っています。ここにあります:JavaのWebページからHTMLソースを読み取っているときに、特定の文字が正しく表示されない

public static String getHTML(String urlToRead) throws Exception // Returns the source code of a given URL. 
    { 
     StringBuilder result = new StringBuilder(); 
     URL url = new URL(urlToRead); 
     HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 

     conn.setRequestMethod("GET"); 
     conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36"); 

     BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream(), Charset.forName("UTF-8"))); 
     String line; 

     while ((line = rd.readLine()) != null) 
     { 
      result.append(line + System.getProperty("line.separator")); 
     } 

     rd.close(); 

     result.toString(); 
    } 

小さな奇妙なものを除いて、それは魅力的です。特定の文字がInputStreamReaderによって正しく読み取られていません。 "ł"文字​​は正しく読み込まれず、代わりに "?"文字に置き換えられます。それはこれまで私がこれまで見つけた唯一のキャラクターですが、他の文字が正しく読み込まれていないことは分かりません。

文字セットの問題のようです。コードからわかるように私はUTF-8を使用しています。私がその場所で使ってみた他の文字セットは、どちらも完全に機能していないか、単なる1文字以上の問題を抱えています。

この問題の原因にはどのようなものがありますか?どんな助けでも大歓迎です!

+0

さて、レスポンスは 'UTF-8'でエンコードされていると思いますか?なぜサーバーが使用している文字セットを見つけるために接続のプロパティをチェックしないのですか? – Holger

+0

@Holger私は基本的にHTMLソースを見て、 'を見ました。私はそれがUTF-8であると仮定するのは間違っていたのですか?私はまだこのハハにはまったく新しいです。 – Step

+0

はい、私はただエンコードがUTF-8であることを確認しました。 – Step

答えて

1

あなたが試してみました:

conn.setRequestProperty("content-type", "text/plain; charset=utf-8"); 
+1

これで、この要求本体がUTF-8としてエンコードされていることをサーバーに伝えるだけです。しかし、GETリクエストにはボディがありません。 –

+0

これは残念ながらうまくいきませんでした:(。 – Step

0

をあなたが読んリソースと同じ文字セットを使用する必要があります。まず、そのHTMLで使用されているエンコードが何であるかを確認します。通常、そのコンテンツタイプは応答ヘッダーで送信されます。あなたはGETリクエストを持っているので、ネットワークトラッキングを備えたウェブブラウザを使ってこの情報を簡単に得ることができます。

たとえば、Chromeを使用して空のタブを開き、開発ツール(F12)を開き、目的のWebページを読み込みます。あなたはdevツールのネットワークタブを見て、応答ヘッダーを調べることができます。

+0

これはプログラマーのためのサイトなので、質問のコードの 'HttpURLConnection'オブジェクトで' getContentType() 'を呼び出すと、コンテキストを別のツールに切り替える必要はありませんWebブラウザ... – Holger

+0

@Holgerはい、これはプログラマーのためのサイトです。すべてのプログラマーは、適切なツールを知っている必要があります.HTTPプロトコルで取得したHTMLページを解析(読み込み)しようとしているので、 –

+0

ヘッダーの文字セットをチェックすることは、私がやった最初のものの1つでした。これは、問題を解決するのに役立ちます。それは奇妙です...他のすべての文字は、私が見ることのできるものから正しく読み込まれていますが、「?」として読み込まれたものは例外です。 – Step

関連する問題