[VBScript] URIエンコード・デコードするツール

どーもボキです。

URLに全角文字が含まれるとURIエンコードされて扱いづらいことありませんか?

[VBScript] URIエンコード・デコードするツール_a0021757_16152454.png
WikipediaのURLには全角文字が含まれますよね

全角文字が含まれるURLをコピーすると、取得される文字データは以下のように文字化けしたものになります。

これは、全角文字や、URLに使えない文字がURIエンコードされるためです。
せっかく日本語文字が入ってわかりやすいのに、URIエンコードされた状態ではどこにリンクしているかわかりませんよね?

以下のような元の文字列が取得できたらいいのにな、と思いませんか?


カンタンです。コピーした文字列を簡単にURIデコードできるツールを用意しましたから。

サンプルプログラムのダウンロードと使い方


[VBScript] URIエンコード・デコードするツール_a0021757_16205122.png
コピーした文字列をURIエンコード(or デコード)し、コピーしなおします。


今回開発したプログラムソース

<job>
'-------------------------------------------------------------------------------
' クリップボードから文字列を取得する
'-------------------------------------------------------------------------------
<script language="VBScript">
Dim s,t
s = GetClipboard
'-------------------------------------------------------------------------------
' クリップボードから文字列を取得する
'-------------------------------------------------------------------------------
Function GetClipboard
On Error Resume Next
Dim r: r = ""
Dim objWS: Set objWS = CreateObject("WScript.Shell")
Dim objFS: Set objFS = CreateObject("Scripting.FileSystemObject")
Dim fpth
fpth = objFS.GetSpecialFolder(2) & "" & objFS.GetTempName
' クリップボードの内容を一時ファイルへ
cmd = "cmd /c PowerShell Get-Clipboard -Format Text > " & fpth
objWS.Run cmd, 0, True
' 一時ファイルの処理
If objFS.FileExists(fpth) Then
r = objFS.OpenTextFile(fpth, 1).ReadAll
objFS.DeleteFile fpth, True
End If
If Right(r, 2) = vbCrLf Then r = Left(r, Len(r) - 2)
GetClipboard = r
On Error Goto 0
End Function
</script>
'-------------------------------------------------------------------------------
' JavaScriptを利用して、文字列をエンコード・デコードする
'-------------------------------------------------------------------------------
<script language="JavaScript">
// JavaScriptしか使えない関数をコールする
if (s.indexOf('%') != -1) {
t = decodeURI(s);
} else {
t = encodeURI(s);
}
</script>
'-------------------------------------------------------------------------------
' クリップボードへ文字列をコピーする
'-------------------------------------------------------------------------------
<script language="VBScript">
SetClipboard t
CreateObject("WScript.Shell").Popup Join(Array("from:" ,s ,"" ,"to:" ,t), vbLf), 5, WScript.ScriptName, vbInformation
'-------------------------------------------------------------------------------
' クリップボードへ文字列を反映する
'-------------------------------------------------------------------------------
Sub SetClipboard(iStr)
On Error Resume Next
::::Do
' 一時ファイルへコピー文字を記載
Dim objFS
Set objFS = CreateObject("Scripting.FileSystemObject")
Dim fpth
fpth = DPath_temp & objFS.GetTempName
Dim tmp
Set tmp = objFS.CreateTextFile(fpth, True)
tmp.Write iStr
tmp.Close
If Err Then MsgBox "環境依存文字が含まれるためコピーできません。", vbCritical, "SetClipboard": Exit Do
' 一時ファイルをクリップボードへ
cmd = "cmd /c clip < " & fpth
CreateObject("WScript.Shell").Run cmd, 0, True
::::Loop Until 1
' 一時ファイルを削除
objFS.DeleteFile fpth, True
On Error Goto 0
End Sub
</script>
</job>


この記事での気付き
このスクリプトはwsfファイル(コレ)を使いました。URIエンコード・デコードにはJavaScrptを使い、クリップボードとのやり取り部にはVBScriptを使っています。wsfファイルが親となり、子であるそれぞれのスクリプト言語での処理をまとめる、という構造です(コレ)。


にほんブログ村 IT技術ブログへ
にほんブログ村

名前
URL
削除用パスワード

※このブログはコメント承認制を適用しています。ブログの持ち主が承認するまでコメントは表示されません。

by yozda | 2024-10-12 16:22 | ボキ、しごとのヒント集める | Comments(0)

ボキの興味、書き散らかします


by ボキ
カレンダー
S M T W T F S
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31