VBScript

文字コードを指定してURLエンコードを行う

本題に入る前にまずは下記エントリーをご覧ください。

64ビット版OfficeでURLエンコード処理ができない?に対する返信1
64ビット版OfficeでURLエンコード処理ができない?に対する返信2
64ビット版OfficeでURLエンコード処理ができない?に対する返信3

上記エントリーは、私が書いた「64ビット環境でのScriptControlの代わり」や「64ビット版OfficeでURLエンコード処理ができない?」といった記事をYU-TANGさんがさらに深く掘り下げてくださったもので、64ビット環境下でのURLエンコード処理を、いかにして自分で書かずに実装するかが詳しくまとまっています。

上記エントリーの中で特に注目したいのが「64ビット版OfficeでURLエンコード処理ができない?に対する返信3」で書かれている、PowerShell経由で.NETの機能を呼び出す方法。
今回はこれを元に文字コードを指定してURLエンコードを行う方法を紹介します(VBScript)。

Option Explicit

MsgBox EncodeURL("あいうえお", "euc-jp")

Private Function EncodeURL(ByVal TargetString, ByVal CodeName)
  Dim Cmd
  
  'PowerShellの実行確認
  On Error Resume Next
  CreateObject("WScript.Shell").Run "PowerShell -Version", 0
  If Err.Number <> 0 Then Exit Function
  On Error GoTo 0
  
  TargetString = Replace(TargetString, "`", "``")
  TargetString = Replace(TargetString, """", "`""""""")
  Cmd = "PowerShell -Command ""[void]([Reflection.Assembly]::LoadWithPartialName(""""""System.Web""""""));[Web.HttpUtility]::UrlEncode(""""""" & TargetString & """"""", [Text.Encoding]::GetEncoding(""""""" & CodeName & """""""))"""
  EncodeURL = CreateObject("WScript.Shell").Exec(Cmd).StdOut.ReadLine
End Function

上記コードでは、HttpUtilityクラスのUrlEncodeメソッドをPowerShell経由で呼び出すことによって、文字コードを指定してURLエンコードを行っています。
上記EncodeURL関数の第二引数で指定しているコード名は「Encodingクラスで扱えるエンコーディング名は?[C#、VB]」や「Encoding.WebName プロパティ」あたりをご参照ください。

VBScriptからわざわざPowerShellを呼び出す、というのは明らかに無駄なように思いますが、”PowerShellが使用できるPCだけれども、処理はどうしてもVBScriptで行わなければいけない“というような、非常に特殊な状況下では役に立つかもしれません。(もしくは上記コードをVBAに直して既存のマクロに追加するときか…)

上記コードを応用すればVBS/VBAから自由に.NETの膨大な機能を利用することができるので、使いようによっては便利なのかもしれません。
最初からC#やPowerShellでコードを書けば良い、という意見を抜きにすれば。

[Excel Services ECMAScript]ループによる入力と一括入力の処理時間について前のページ

サーバーを移転しました。次のページ

関連記事

  1. VBScript

    動画回転用簡易FFmpegフロントエンド

    アーケードゲームのプレイを録画した際、機器によっては録画した動画の向き…

  2. VBScript

    Adobe Illustratorを操作するVBScript

    Acrobatと同様にタイプライブラリが用意されているため、VBAやV…

  3. VBScript

    Windowsのバージョン情報を取得する

    小ネタです。verコマンドを利用してWindowsのバージ…

  4. Windows関連

    右クリックメニューからフォルダを管理者権限で開く(コマンド プロンプト)

    フォルダをShiftキーを押しながら右クリックすると、「コマンド ウィ…

  5. VBScript

    Illustratorに登録されたPDFプリセットを列挙するVBScript

    前回の記事で、VBSからIllustratorが操作できることを紹介し…

  6. Windows 10

    Microsoft Edgeを起動するVBScript

    前回の記事の関連ですが、下記コードのようにShellExecuteメソ…

コメント

  1. この記事へのコメントはありません。

Time limit is exhausted. Please reload CAPTCHA.

※本ページはプロモーションが含まれています。

Translate

最近の記事

アーカイブ

PAGE TOP