Windows 7にPowerShell3をインストールして使っています。
あるサイトに、Invoke-WebRequestでリクエストすると
「'Windows-31J' はサポートされたエンコード名ではありません。」
というエラーになります。
Windows 8 評価版でも同様でした。
そのサイトからのHTTPレスポンスヘッダの
「Content-Type=text/html; charset=Windows-31J」
のせいと思います。
エラーを回避する方法はありますか?
返信ありがとうございます。
Invoke-WebRequestコマンドレットが返すHtmlWebResponseObjectオブジェクトがかなり有用と思いましたので是非使いたかったのですが残念です。'Windows-31J' というエンコーディングはそれほどマイナーなものでもないと思いますので、.NET Frameworkで使えるようになることを期待します。
とりあえずは、.NET FrameworkのWebClientクラスあるいはHttpWebRequestクラスを使う方向で考えます。
Invoke-WebRequestコマンドレットは、レスポンスヘッダのcharsetをそのまま取得した文字列の文字コードとして利用しますので、登録されていない文字コードだとエラーになるのは残念ながら避けられないかと思います。 (-Encodingパラメータがあれば良かったのですけども…)
.NET FrameworkのWebClientクラスを用いる場合だと、Encodingプロパティを指定して取得する文字列の文字コードを規定できますので、そちらを利用すると良いかと思います。その場合、Windows-31JはWindows版のShift_JISのことなので、文字コードとしてはShift_JISを指定すれば問題ないかと思います。