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

    ドラッグ&ドロップしたOfficeファイルをPDFに変換するVBScript

    複数のExcelファイルをPDFに一括変換する必要があったので、簡単な…

  2. Windows 10

    Microsoft Update カタログから累積更新プログラムをダウンロードするVBScript

    「累積更新プログラム」とは、その名の通りOSを最新の状態に保つための更…

  3. VBScript

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

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

  4. VBScript

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

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

  5. Windows関連

    Windows 8を従来のスタイルに変更するスクリプト

    2012/3/2 追記:下記情報はWindows Develope…

コメント

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

Time limit is exhausted. Please reload CAPTCHA.

Translate

Chinese (Simplified)Chinese (Traditional)EnglishFrenchGermanJapaneseKoreanRussianSpanish

最近の記事

アーカイブ

PAGE TOP