Home > Windows にまつわる e.t.c.

パーセントエンコーディングされた URL を PowerShell でデコードする


結論を先に書くと PowerShell で書くとこんな感じです

[System.Web.HttpUtility]::UrlDecode($EncodeURL)

 

Web ブラウザーに表示されている URL をそのまま UrlDecode に食わせると、デコードしてくれる素敵なメソッドです
(Windows PowerShell 5.x で使う場合は、事前に「Add-Type -AssemblyName System.Web」する必要があります)

 

参考情報

HttpUtility.UrlDecode Method (System.Web) | Microsoft Learn

 

 

どうしてこんなことを調べたかというと、SharePoint でファイルを格納しているフォルダーを共有するために、パンくずで表現したいと思ったのですが、Web UI に表示されているパンくずはうまくコピペができないんですよね...

フォルダーを開いているときの URI を見ると、パーセントエンコーディングされているので、ひょっとしてフォルダー パスがそのまま表現されているのではないかと思い、URL を PowerShell でエンコードするスクリプトを書こうと思い立ちました

 

そもそも URL で使用できる文字は、RFC3986/STD66(Uniform Resource Identifiers (URI): Generic Syntax)で定義されており、アルファベットと数字と一部の記号しか使用できません

日本語とか、RFC3986 で許可されていない文字を表す場合は、同 RFC3986 でパーセントエンコーディングするように定められています
("%"が大量に含まれている時々見る URL)

 

パーセントエンコーディングは、対象の文字列を UTF-8 にして、1バイトずつ16進数の文字列にして % を付ける仕様です

 

例えば「村」をパーセントエンコーディングすると、こんな感じになります

 

村 = 0xE69D91 → E6 9D 91 → %E6%9D%91

 

UrlDecode を使って、デコードされた URL から必要部分を取り出して、多少加工すればパンくずに出来ました

メデタシメデタシ

 

Google Drive のパンくずも取れると完璧なのですが... どうやら無理っぽい orz

 

 

back.gif (1980 バイト)

home.gif (1907 バイト)

Copyright © MURA All rights reserved.