#navi(../)
* PowerShellでURLエンコード・URLデコード [#zfdb4ea4]
PowerShellでURLエンコード・URLデコードを行うサンプルを以下に記します。

#contents
#htmlinsertpcsp(win-top.html,win-sp.html)


* 関連記事 [#s88459d9]
-[[PowerShellでBase64のエンコードとデコード>PowerShell/PowerShellでBase64のエンコードとデコード]]
-[[PowerShellでURLエンコード・URLデコード>PowerShell/PowerShellでURLエンコード・URLデコード]]

* 使用したPowerShellのバージョン [#afc8c97b]
 PS D:\> ($HOST.Version).ToString()
 5.0.10586.117

* HttpUtilityクラス [#y6844750]
HttpUtilityクラスを使用すると簡単にURLエンコード・デコードをすることができます。~
ただし、HttpUtilityクラスがデフォルトでは有効になっていないので、Add-Typeにて追加する必要があります。
 Add-Type -AssemblyName System.Web

以下のように、簡単にURLエンコード・デコードをすることができます。
 PS D:\> Add-Type -AssemblyName System.Web
 PS D:\> [System.Web.HttpUtility]::UrlEncode("あ")
 %e3%81%82
 PS D:\> [System.Web.HttpUtility]::UrlDecode("%e3%81%82")
 あ

ただし、UrlEncodeの出力を見ると、UTF-8になっているのがわかります。~
E38182はUTF-8では「あ」になります。

* 文字コードを指定してURLエンコード [#d803addd]
以下のようにGetEncodingを使用して、文字コードを指定することができます。
 PS D:\> [System.Web.HttpUtility]::UrlEncode("あ",[Text.Encoding]::GetEncoding("sjis"))
 %82%a0
 PS D:\> [System.Web.HttpUtility]::UrlEncode("あ",[Text.Encoding]::GetEncoding("SHIFT-JIS"))
 %82%a0

以下の出力のように、「aiueoあいうえお」の文字が入っているSJISのテキストファイルを作成しました。~
WindowsだとSJISファイルが多いと思いますので。~
Out-FileのEncodingオプションにdefaultを指定しているので、SJISで出力されます。~
(Encodingオプションに指定しないと(-Encoding defaultを記述しない)、UNICODE BOM付で出力されます。)

 PS D:\> Write-Output aiueoあいうえお | Out-File -Encoding default aiueo_sjis.txt
 PS D:\> gc .\aiueo_sjis.txt
 aiueoあいうえお

このSJISのテキストファイル内容をURLエンコードしてみます。

 PS D:\> Add-Type -AssemblyName System.Web
 PS D:\> [System.Web.HttpUtility]::UrlEncode((Get-Content(".\aiueo_sjis.txt")).toString(),[Text.Encoding]::GetEncoding("sjis"))
 aiueo%82%a0%82%a2%82%a4%82%a6%82%a8
 PS D:\> [System.Web.HttpUtility]::UrlEncode((Get-Content(".\aiueo_sjis.txt")).toString(),[Text.Encoding]::GetEncoding("Shift-JIS"))
 aiueo%82%a0%82%a2%82%a4%82%a6%82%a8

尚、sjis, Shift-JISと記した部分をeuc-jpにすれば、eucにもなります。
 PS D:\> [System.Web.HttpUtility]::UrlEncode((Get-Content(".\aiueo_sjis.txt")).toString(),[Text.Encoding]::GetEncoding("euc-jp"))
 aiueo%a4%a2%a4%a4%a4%a6%a4%a8%a4%aa

詳細は調べておりませんが、文字コードを判別してくれているようです。


* 文字コードを指定してURLデコードをする [#re7b47bd]
上記では文字コード指定による、URLエンコードを行いました。~
以下、文字コード指定によるURLデコードの実行例を記します。

上記のsjisを指定してURLエンコードした文字列を使用しURLデコードしてみた例です。
 PS D:\> [System.Web.HttpUtility]::UrlDecode("aiueo%82%a0%82%a2%82%a4%82%a6%82%a8",[Text.Encoding]::GetEncoding("sjis"))
 aiueoあいうえお

上記のeuc-jpを指定してURLエンコードした文字列を使用しURLデコードしてみた例です。
 PS D:\> [System.Web.HttpUtility]::UrlDecode("aiueo%a4%a2%a4%a4%a4%a6%a4%a8%a4%aa",[Text.Encoding]::GetEncoding("euc-jp"))
 aiueoあいうえお

以下の例は、URLエンコードした文字コードがeuc-jpなのに、sjisを指定した例です。~
当然、文字化けします。
 PS D:\> [System.Web.HttpUtility]::UrlDecode("aiueo%a4%a2%a4%a4%a4%a6%a4%a8%a4%aa",[Text.Encoding]::GetEncoding("sjis"))
 aiueo、「、、、ヲ、ィ、ェ

以上、PowerShellでURLエンコード、デコードを行う方法の紹介でした。

#htmlinsertpcsp(win-btm.html,win-sp.html)

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS