3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Invoke-WebRequestの日本語文字化け解決策

Last updated at Posted at 2021-03-16

問題点

PowerShellのInvoke-WebRequestでcharsetがutf-8に設定されているページを読込むと日本語部分が文字化けして「????」となるため、正しく日本語の処理ができません。

$res = Invoke-WebRequest -Uri $uri
$content = $res.Content
# 以降、$contentに対して、文字列検索や、正規表現で部分文字列の取り出し処理など。
$matches = [RegEx]::Matches($content, "href=""(http:\/\/www\.example\.com\/項目[a-z0-9]{20}\.html)""")

参考にした記事

この問題について、以下の記事を参考にさせて頂きました。

この中にある「本来のエンコードがUTF8の場合」というコードです。あらためて引用させて頂きます。

[System.Text.Encoding]::UTF8.GetString( [System.Text.Encoding]::GetEncoding("ISO-8859-1").GetBytes($resp.Content) )

これは ISO-8859-1 ⇒ UTF-8 の変換と理解しています。(間違っていればご指摘ください)

改善策

ところが上記のコードでも日本語部分が「????」となるため、以下のように書き換えてみたところ文字化けが解消しました。

$content = [System.Text.Encoding]::UTF8.GetString( [System.Text.Encoding]::GetEncoding("UTF-8").GetBytes($res.Content) )

このコードは UTF-8 ⇒ UTF-8 という意味のない処理をしているように見えるのですが、結果として問題は解決しました。

解消した理由までは理解できていませんが、Tipsとして書いておきます。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?