none
Invoke-WebRequest : 'Windows-31J' はサポートされたエンコード名ではありません。 RRS feed

  • 質問

  • Windows 7にPowerShell3をインストールして使っています。

    あるサイトに、Invoke-WebRequestでリクエストすると

    「'Windows-31J' はサポートされたエンコード名ではありません。」

    というエラーになります。

    Windows 8 評価版でも同様でした。

    そのサイトからのHTTPレスポンスヘッダの

    「Content-Type=text/html; charset=Windows-31J」

    のせいと思います。

    エラーを回避する方法はありますか?

    2013年5月14日 2:33

回答

  • 返信ありがとうございます。

    Invoke-WebRequestコマンドレットが返すHtmlWebResponseObjectオブジェクトがかなり有用と思いましたので是非使いたかったのですが残念です。'Windows-31J' というエンコーディングはそれほどマイナーなものでもないと思いますので、.NET Frameworkで使えるようになることを期待します。

    とりあえずは、.NET FrameworkのWebClientクラスあるいはHttpWebRequestクラスを使う方向で考えます。

    • 回答としてマーク wv45 2013年5月15日 1:27
    2013年5月15日 0:32

すべての返信

  • Invoke-WebRequestコマンドレットは、レスポンスヘッダのcharsetをそのまま取得した文字列の文字コードとして利用しますので、登録されていない文字コードだとエラーになるのは残念ながら避けられないかと思います。
    (-Encodingパラメータがあれば良かったのですけども…)

    .NET FrameworkのWebClientクラスを用いる場合だと、Encodingプロパティを指定して取得する文字列の文字コードを規定できますので、そちらを利用すると良いかと思います。その場合、Windows-31JはWindows版のShift_JISのことなので、文字コードとしてはShift_JISを指定すれば問題ないかと思います。

    2013年5月14日 9:23
    モデレータ
  • 返信ありがとうございます。

    Invoke-WebRequestコマンドレットが返すHtmlWebResponseObjectオブジェクトがかなり有用と思いましたので是非使いたかったのですが残念です。'Windows-31J' というエンコーディングはそれほどマイナーなものでもないと思いますので、.NET Frameworkで使えるようになることを期待します。

    とりあえずは、.NET FrameworkのWebClientクラスあるいはHttpWebRequestクラスを使う方向で考えます。

    • 回答としてマーク wv45 2013年5月15日 1:27
    2013年5月15日 0:32