[.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" のように空白で区切られていると、 上手くいく。)
| 固定リンク
「プログラミング」カテゴリの記事
- 【.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)
この記事へのコメントは終了しました。
コメント
> フィードバックが英訳されてませんね。
あ、ほんとですねぇ。
月遅れの夏休みとか? w
投稿: biac | 2011年9月14日 (水) 11時19分
こんにちは、ダッチです。
フィードバックが英訳されてませんね。
どうしたんだろう。
投稿: ダッチ | 2011年9月14日 (水) 09時17分