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のテンプレートをインストールするスクリプト

    Wordマクロをテンプレートにして使用する場合、通常そのテンプレートフ…

  2. VBScript

    clipコマンドを利用してクリップボードに文字列をコピーするVBScript

    clipコマンドを利用して文字列をクリップボードにコピーするVBScr…

  3. VBScript

    Expression WebでVBScriptのコードを書いてみる。

    今日たまたま下記の記事を見つけました。10年近く前の古い記事です。…

  4. Office関連

    「2014年12月のWindows Update以降コマンドボタンが使えなくなった」トラブルへのFi…

    当ブログでも「KB2553154の更新プログラムをアンインストールする…

  5. Windows関連

    特殊フォルダーのパスを取得するVBScript

    ファイルのコピーや移動を行う場合に特殊フォルダーのパスが必要になること…

  6. VBScript

    画像の一部にぼかしを入れるバッチ処理

    Paint.NETなどの画像処理ソフトを使うと、簡単に画像にぼかしを入…

コメント

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

Time limit is exhausted. Please reload CAPTCHA.

Translate

Chinese (Simplified)Chinese (Traditional)EnglishFrenchGermanJapaneseKoreanRussianSpanish

最近の記事

アーカイブ

PAGE TOP