[.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" のように空白で区切られていると、 上手くいく。)
| 固定リンク
| コメント (2)
| トラックバック (1)