« [VS2010] (続) オプション 「生成されたコードから結果を表示しない」 の挙動不審 | トップページ | [MEMO] ファンクションポイントの算出法、あれこれ »

2011年8月26日 (金)

[.NET] WebClient クラスの Encoding 自動認識がバグってる、というフィードバックをしました

.NET 4 から、 WebClient クラスの DownloadString() メソッドは、 (明示的に Encoding が指定されていない時に) HTTP レスポンスヘッダーの Content-type に含まれる charset を見て、 文字 Encoding を自動識別してくれるようになりました。 ⇒  「[.NET] フィードバック その後 - WebClient オブジェクトは Encoding を自動認識してほしい」 (2009/12/29)

…が、 正式リリースされた .NET 4 では、 この部分がバグってたんですねぇ。 その頃、 MS Connect にレポートを上げてる余裕がなかったんで、 まぁ誰か気付いて出してくれるだろう、 と忘れていたら…。 どうやら、 誰もバグレポを上げなかったようで orz

ということで、 MS Connect に上げました。
ID: 685732 「System.Net.WebClient.DownloadString() が、Encoding の自動識別に失敗する

まぁ、 そんな仕様に .NET 4 で変わったと気付いていない人が多かったでしょう (MSDN ドキュメントには書かれていません) から、 たいして実害は出ていないはずです。 従来通りに DownloadString() は使わずに、 (Connect の「回避策」のところに書いたように) DownloadData() でバイナリーとして読み込んでから charset を調べて文字列に変換するか、 あるいは WebResponse クラスを使って 1行ずつ読む、 といったコードを書いているはずです。

なお、 ildasm でチラチラ覗いてみた感じでは、 Content-type に、 "text/html;charset=UTF-8" のように ';' の後ろに空白が無いと、 Split() するときに失敗しているようでした。 ( "text/html; charset=UTF-8" のように空白で区切られていると、 上手くいく。)

|

« [VS2010] (続) オプション 「生成されたコードから結果を表示しない」 の挙動不審 | トップページ | [MEMO] ファンクションポイントの算出法、あれこれ »

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

コメント

> フィードバックが英訳されてませんね。

あ、ほんとですねぇ。
月遅れの夏休みとか? w

投稿: biac | 2011年9月14日 (水) 11時19分

こんにちは、ダッチです。

フィードバックが英訳されてませんね。
どうしたんだろう。

投稿: ダッチ | 2011年9月14日 (水) 09時17分

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

トラックバック


この記事へのトラックバック一覧です: [.NET] WebClient クラスの Encoding 自動認識がバグってる、というフィードバックをしました:

» C#.NETで覚えたことJavaと比較しつつ忘備録 [再び、 失業SEの開発日誌]
Webアクセス とても簡単。System.Net.WebClientを使うだけ。jakartaのHttpClient相当。 http://msdn.microsoft.com/ja-jp/library/system.net.webclient.aspx 文字コードを自動判定するDownloadString()はバグっているらしいので自力で文字コード処理が必要。 http://blu…... [続きを読む]

受信: 2012年8月19日 (日) 20時46分

« [VS2010] (続) オプション 「生成されたコードから結果を表示しない」 の挙動不審 | トップページ | [MEMO] ファンクションポイントの算出法、あれこれ »