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. Office関連

    古い形式のWordテンプレートを新しい形式に一括変換するVBScript

    古い形式のWordテンプレート(dot)を新しい形式(dotx,dot…

  2. Office関連

    ヘッドレス ChromeとSeleniumBasicでWebページ全体のスクリーンショットを撮る方法…

    先日、ヘッドレス ChromeでWebページ全体のスクリーンショットを…

  3. Office関連

    ドラッグ&ドロップでExcelファイルをアドイン形式(xlam)に一括変換するVBScript

    複数のExcelファイルをアドイン形式(xlam)に変換する必要があっ…

  4. VBScript

    OWSPostDataオブジェクトを使って文字列をエンコードするVBS

    OWSPostDataオブジェクトのURLEncodeメソッドで文字列…

  5. VBScript

    実行中のアプリケーション一覧を出力するVBScript

    「VBS アプリ一覧 出力」というキーワード検索での訪問があったので、…

  6. VBScript

    WordPressのバックアップを取ってローカル環境で動かす方法(3)

    「WordPressのバックアップを取ってローカル環境で動かす方法(1…

コメント

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

Time limit is exhausted. Please reload CAPTCHA.

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

Translate

最近の記事

アーカイブ

PAGE TOP