« [.NET] 別スレッドから UI にデータを渡すコードを 1行で書く | トップページ | [.NET] ASP.NET を x86 用にビルドすると、 動作しない »

2009年10月 5日 (月)

[.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] 別スレッドから UI にデータを渡すコードを 1行で書く | トップページ | [.NET] ASP.NET を x86 用にビルドすると、 動作しない »

プログラミング」カテゴリの記事

コメント

> 「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分

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: [.NET] WebClient オブジェクトは Encoding を自動認識してほしい、というフィードバックをしました:

» [.NET] フィードバック その後 - WebClient オブジェクトは Encoding を自動認識してほしい [biac の それさえもおそらくは幸せな日々@nifty]
これは 10月に提案として出したフィードバック (FeedbackID=495816)。 めでたく .NET 4 beta2 で実装されてました。Web サーバーがキチンと HTTP レスポンス ヘッダーに charset を入れておいてくれるなら、 ほんの数行で Web ページの内容を、 文字化けすることなく取得でき... [続きを読む]

受信: 2009年12月29日 (火) 00時15分

« [.NET] 別スレッドから UI にデータを渡すコードを 1行で書く | トップページ | [.NET] ASP.NET を x86 用にビルドすると、 動作しない »