2011/12/28 追記:
関連記事として「文字コードを指定してURLエンコードを行う」を書きました。
「64ビット環境でのScriptControlの代わり」で記事を書いていますが、64ビット環境でScriptControlを利用してURLエンコード処理を行おうとした場合、エラーが発生して処理することができません(64ビットOS上の32ビット版Office(WOW64上)ではエラーになりません)。
これは「msscript.ocx」が64ビット環境に対応していないためですが、今回は「64ビット環境でのScriptControlの代わり」で紹介している方法とは違う方法でURLエンコード処理を実行してみます。
[標準モジュール]
Option Explicit Public Sub Sample() MsgBox EncodeURLx64("東京都千代田区") End Sub Public Function EncodeURLx64(ByVal str As String) As String Dim s As String, com As String, ret As String Dim ScriptFilePath As String, ExeFilePath As String ret = "" '初期化 'スクリプト用コード設定 s = "Option Explicit" & vbCrLf s = s & vbCrLf s = s & "Dim Args, ret" & vbCrLf s = s & vbCrLf s = s & "Set Args = WScript.Arguments" & vbCrLf s = s & "If Args.Count < 1 Then WScript.Quit" & vbCrLf s = s & "With CreateObject(""ScriptControl"")" & vbCrLf s = s & " .Language = ""JScript""" & vbCrLf s = s & " ret = .CodeObject.encodeURIComponent(Args(0))" & vbCrLf s = s & "End With" & vbCrLf s = s & "Set Args = Nothing" & vbCrLf s = s & "WScript.Echo ret" ScriptFilePath = VBA.Environ$("TEMP") & "\enc.vbs" With CreateObject("Scripting.FileSystemObject") With .CreateTextFile(ScriptFilePath, True) .Write s .Close End With If .FileExists(ScriptFilePath) Then ExeFilePath = .GetSpecialFolder(0).Path & "\SysWOW64\cscript.exe" If .FileExists(ExeFilePath) Then com = ExeFilePath & " //Nologo """ & ScriptFilePath & """ """ & str & """" ret = CreateObject("WScript.Shell").Exec(com).StdOut.ReadAll End If .DeleteFile ScriptFilePath End If End With EncodeURLx64 = ret End Function
上記「Sample」を実行すると、MsgBoxでURLエンコード処理された文字列が表示されます。
上記コードでは一時的にVBScriptファイルを作成し、32ビット版のcscript.exeでそのスクリプトを実行することで、URLエンコード処理を行っています。
この記事へのコメントはありません。