[.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日)
| 固定リンク
「プログラミング」カテゴリの記事
- 【.NET / Win8.1 ストアアプリ】 HttpClient で TLS 1.1 / 1.2 に対応するには(2018.06.17)
- 【VS2017 15.7pv2】 XAML のランタイム ツールに 「ヒートマップ」 が増えた(2018.03.28)
- 【.NET Core】 プロジェクトを作ると 「project.assets.json が見つかりません」 エラー(2018.02.10)
- 【#UWP】 ビットマップの表示色を変える (Win2D.uwp 経由で Direct2D を使う)(2017.08.23)
- 【#UWP】 CompactOverlay モード: Picture in Picture というか、「最前面に表示」するウィンドウを作る(2017.08.16)
この記事へのコメントは終了しました。
コメント
> 「HTTP ヘッダで指定された Encoding と、実際のコンテンツの Encoding が異なっている」場合もあります。
そういうお間抜けなサイトや、いまだに charset を付けて来ないサイトが、 (おそらくまだかなり多数) あるだろう、ってのは認識してます。
ので、 Connect の 「提案内容」 には、「WebClient に Encoding を指定していない時には、」 っていう条件付きで書いたのですが・・・
Encoding が明示的に指定できなくなったり、 指定しても無視されたりしたんでは、 困りますもん。
Encoding 未指定の時 「だけ」 の動作が、 現行の ANSI 決め打ちから、 charset に従うようになって欲しいのですけど。 それでも、 現状より悪化するだろうという懸念が何かありますでしょうか?
# 「Encoding 未指定にしとけば、絶対に文字化けしない」 と信じ込む輩が出てきそう、という懸念はありますけれど f(^^;
投稿: biac | 2009年10月 6日 (火) 09時29分
Connect のコメントにも書きましたが、問題なのは「charset が指定されていない」場合だけではありません。
「HTTP ヘッダで指定された Encoding と、実際のコンテンツの Encoding が異なっている」場合もあります。
投稿: 渋木宏明(ひどり) | 2009年10月 6日 (火) 02時01分