[.NET] WebClient オブジェクトは Encoding を自動認識してほしい、というフィードバックをしました
System.Net.WebClient クラスってのが、 .NET Framework には昔からありまして。 Web のコンテンツやら RSS フィードやらを取得するのに便利そうなんです。
ほんの数行で書けちゃうことになってます。
string url = "http://www.microsoft.com/ja/jp/default.aspx";
System.Net.WebClient client
= new System.Net.WebClient();
string content = client.DownloadString(url);
ところがどっこい (;;
DownloadString() メソッドってば、 なんでもかんでも ANSI 文字列として引っ張ってきてくれちゃうんですねぇ。 HTTP ヘッダの Content-Type にちゃんと charset が指定されてても、 まるで無視 (;;
つまり、 なにげに日本で使うと文字化けするわけです。
ちゃんと Encoding を指定すればよいのですが、 Web サーバーが固定ならいざしらず、 任意の Web サーバーから情報を収集するようなプログラムを書こうとすると、 自前で HTTP ヘッダを解析して Encoding を決定するコードを書かなきゃなりません。
ということで、 MS Connect でお願いしてみました。
Microsoft Connect: System.Net.WebClient は、HTTP ヘッダーから Encoding を自動的に認識してほしい (ID=495816)
「ぁあ、そうだよねぇ」 と賛同してくださるかたは、 投票してやってくださいまし m(_`_)m
あと、 私がおマヌケなことを言ってるようでしたら、 Connect の回避策のところに、 「こうするんじゃ、ボケぇ」 と書いてやってくださいまし。
( 22:30頃 追記 )
「自動認識」 って書いたのはマズかったですかねぇ。 f(^^;
さっそくツッコミを頂いてしまいました。
私としては、 HTTP レスポンスヘッダーの charset 「だけ」 から文字エンコーディングを決めてくれればいい、 というつもりで書いたのですが…
その他、 meta タグ・ブラウザの言語設定・実行環境のローケールなどから総合的に文字エンコーディングを推定するロジックが必要な人は、 これまで通り頑張って書いていただきたい、 ということで f(^^;
あと、 HTTP レスポンスヘッダーに charset を正しく指定しないのは、 今やセキュリティホール扱いされちゃいます。 ⇒ gihyo.jp: 本当は怖い文字コードの話 ~ 第2回 UTF-7によるクロスサイトスクリプティング攻撃 (2009年4月3日)
| 固定リンク
「プログラミング」カテゴリの記事
- [勉強会@名古屋] 明日は、 わんくま同盟 名古屋勉強会 #10 ですよ~。 それと、 スピーカー交代のお知らせ。(2009.11.27)
- [記事] Silverlight 4 があれば Windows はいらなくなるの?(2009.11.27)
- [勉強会@名古屋] Silverlight を囲む会第1回 (2009/11/22) に参加してきました(2009.11.25)
- [.NET] TFS 2010 beta2 日本語版 ~ クライアント OS へのインストールと構成 (その3 : チームプロジェクトの作成)(2009.11.16)
- [.NET] VS2010: 痛 IDE には痛ソース、だよね~(2009.11.20)
掲示板
blog






コメント
Connect のコメントにも書きましたが、問題なのは「charset が指定されていない」場合だけではありません。
「HTTP ヘッダで指定された Encoding と、実際のコンテンツの Encoding が異なっている」場合もあります。
投稿: 渋木宏明(ひどり) | 2009年10月 6日 (火) 02時01分
> 「HTTP ヘッダで指定された Encoding と、実際のコンテンツの Encoding が異なっている」場合もあります。
そういうお間抜けなサイトや、いまだに charset を付けて来ないサイトが、 (おそらくまだかなり多数) あるだろう、ってのは認識してます。
ので、 Connect の 「提案内容」 には、「WebClient に Encoding を指定していない時には、」 っていう条件付きで書いたのですが・・・
Encoding が明示的に指定できなくなったり、 指定しても無視されたりしたんでは、 困りますもん。
Encoding 未指定の時 「だけ」 の動作が、 現行の ANSI 決め打ちから、 charset に従うようになって欲しいのですけど。 それでも、 現状より悪化するだろうという懸念が何かありますでしょうか?
# 「Encoding 未指定にしとけば、絶対に文字化けしない」 と信じ込む輩が出てきそう、という懸念はありますけれど f(^^;
投稿: biac | 2009年10月 6日 (火) 09時29分