- ベストアンサー
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 としか表示されません。なぜ?
- みんなの回答 (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が取得される。 こんな感じよ。
その他の回答 (1)
- _ranco_
- ベストアンサー率58% (126/214)
> サイトによっては どんなサイトですか。URLを教えてください。そのHTMLのソースを見れば、原因が分かるでしょう。
補足
ありがとうございます。ソースを見ても私には分かりませんでした。 例)http://yahoo.co.jp (○)と http://www.javaroad.jp(×) こぴぺできません
お礼
なるほど、とりあえず原因が分かりました。ありがとうございます。
補足
メタタグ内部を取得するには文字列を取得してなめていけば取れました(報告)。