- - PR -
HTMLエンコード
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 2002-10-07 13:34
こんにちは、
URLConnectionを使って、HTMLページのエンコードを取得したいんですが、失敗します。 getContentEncoding()はnullを戻って、getContentType()は"text/html"だけを戻ります。 HTMLのMETAタグは: <META http-equiv=content-type content="text/html;charset=UTF-8"> どうすればいいでしょうか? よろしくお願いします。 クリス | ||||
|
投稿日時: 2002-10-07 15:50
Content-Typeフィールドは、HTTPサーバーがセットしていると
思います。 ですので、使用しているHTTPサーバーの設定をする、 ということになるのかな? http://www.w3.org/International/O-HTTP-charset ここにちょこっと載っています。 詳しくわからないので的外れかもしれません。 | ||||
|
投稿日時: 2002-10-07 16:24
ありがとうございました。でも、ちょっと的外れですね。
http://www.w3.org/International/O-HTTP-charset を見ると、各HTMLページには、charsetは設定されるはずです。 設定されていないと、既定の「ISO-8859-1」に設定されてしまいます。 それに、サーバ側には、この既定値を制御できます。例えば、「.htm」という拡張子に「UTF-8」をマップできます。 そうすると、URLConnectionのgetContentType()の戻り値は「text/html;charset=UTF-8」になります。 しかし、サーバ側のMIMEマップを変えたくありません(まぁ、具体的にサーバをアクセスできません)。 HTMLページにあるエンコードを取得したいんです。つまり、HTMLページにある「<META http-equiv=content-type content="text/html;charset=UTF-8"> 」は設定されたら、charsetを取得する方法があるでしょうか?openConnection()をしてから、どうすればいいでしょうか? よろしくお願いします。 | ||||
|
投稿日時: 2002-10-07 17:45
<META>タグで宣言されているcharsetの値が知りたいのなら、ページの先頭を読み込んで調べてみれば良いような気がするんですが、だめなんでしょうか?
| ||||
|
投稿日時: 2002-10-07 17:56
思うにですね、HTTPサーバーは、単純にクライアントから要求された
リソースを返すだけ、つまり中身のエンコーディングなど知らない、 もしくは解析しないんじゃないでしょうか。 具体的に言うと、HTMLで<META>タグを記述しても、HTTPサーバーは それを親切にもレスポンスヘッダに付けてくれるようなことはしない。 まあ、当然といえば当然な気がしますが。 したがって、おっしゃることを実現するには、 ・HTTPサーバーの設定を変える もしくは ・自分でHTMLを解析する しかないんじゃないでしょうか。 openConnectionして、InputStreamからHTMLの中身を読み込んで、 自分で<META>タグを探し、charsetの部分を読むしかないのかな。 うーん、また的外れかな? 誰か詳しい人いたらフォローしていただければ ありがたいです。 | ||||
|
投稿日時: 2002-10-07 17:58
へげもんさんと内容がぶつかってしまいました。
書いてることは一緒です。 うんうん悩みながら書いているあいだにレスがついて いたようです。 | ||||
|
投稿日時: 2002-10-07 18:02
<meta http-equiv>はサーバの実装によってはHTTPヘッダに設定してくれるようです。
でもあまりそういうサーバは多くないみたいで、実際はクライアントがmetaタグを解釈する方が多そうです。 URLconnectionのgetContentEncoding()のソースを見てみましたが、単純に getHeaderField("content-encoding")としてるだけでした。 それでgetHeaderField(String name)を見てみると
あれ?常にnullを返してる。 (j2sdk1.4.1&1.3.1) | ||||
|
投稿日時: 2002-10-07 18:08
そういうサーバーもあるんですねえ。
nullを返してるのは、 URLConnectionがabstractクラスであって、 実装をサブクラスにまかせているからです。 Template Methodパターンってとこでしょうか。 | ||||
