• ベストアンサー

URLConnection getContentType

URL url = new URL("http://***********"); System.out.println(url.openConnection().getContentType()); とすると普通なら text/html; charset=Shift_JIS などと出ますが、 サイトによっては text/html; charset=Shift_JIS と書かれていても text/html としか表示されません。なぜ?

質問者が選んだベストアンサー

  • ベストアンサー
  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.2

> サイトによっては~と書かれていて これはHTMLのmetaタグのことよね? HttpURLConnectionのgetContentTypeは HTMLのmetaタグのデータを取得するものではないわ。 これはHTTPプロトコルに記述されているContent-Typeを取得するものよ。 HTTPプロトコルのContent-Typeは metaタグとは別に送信されるわ。 Javaで言うなら HttpURLConnection#setContentTypeがこれに当たるわね。 HTTPプロトコルのContent-Typeは HttpServletResponse#setContentTypeのように 毎回設定することもできれば Webサーバで一括で設定することもできるわ。 ここでは話の都合上、仮に毎回設定とするけど レスポンスにcharset=Shift_JISが設定されていれば (HttpServletResponse#getCharacterEncodingね) text/html; charset=Shift_JISが取得される。 設定していなければtext/htmlが取得される。 こんな感じよ。

noname#101202
質問者

お礼

なるほど、とりあえず原因が分かりました。ありがとうございます。

noname#101202
質問者

補足

メタタグ内部を取得するには文字列を取得してなめていけば取れました(報告)。

その他の回答 (1)

  • _ranco_
  • ベストアンサー率58% (126/214)
回答No.1

> サイトによっては どんなサイトですか。URLを教えてください。そのHTMLのソースを見れば、原因が分かるでしょう。

noname#101202
質問者

補足

ありがとうございます。ソースを見ても私には分かりませんでした。 例)http://yahoo.co.jp (○)と http://www.javaroad.jp(×) こぴぺできません

関連するQ&A