日本語等を UTF-8 で変換した時の文字列 という理解はしてますが、どうもピンと来ない。
やはり、分る形で見て見たい。
そこで、プログラミング。
作って見る気になった理由は、Blogger のラベルを付けた 別の投稿 で書いてます。
さて、VB でのプログラミングをご紹介。
ひとつの Form に、TextBox を 3 つ ( うちひとつは .Multiline = True , .ScrollBars = Vertical ) 、
Label を 3 つ以上適宜、 Button を 3 つ、CheckBox を 1 つ 用意します。
アプリの仕様は、アドレス(以下 URL と呼称)を TextBox で指定し、これの値が変わった時に、
別の TextBox でURL Decode した文字列(日本語等が普通に表示される)を表示します。
これと同時に、URL の中のクエリ文字列を別掲します。
クエリ文字列が長い場合は複数の条件が入っている場合が多く、見難くなる事が考えられるので、
CheckBox を用意し、この値によって、複数行に分割しての表示が出来るようにします。
また、指定は手入力以外に、クリップボード経由、DragDrop も考慮します。
注: Browser の AddressBar からは DragDrop 可能ですが、
Browser の Body 内のリンク文字列は Browser 外に Drag 出来ないようです。
(私の知識不足か? IE10 の場合、保護モード有効下での挙動(仕様?)のようです。 怖いので試してませんけど。)
さて、コードは以下に。
一部、余計なコードが残ってますが、奮闘の記録として残して置きます。 (上記 緑の部分) 参考になさる方は削除して下さい。
Public Class Form1
Private uriQuery As String = ""
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.AllowDrop = True ' for DragDrop
' Browser のリンクからの取得の確認用 ' 結局、出来ず、断念! DragDrop は赤い STOP 印になり Browser の外に出られない
' Me.ListBox1.Visible = False ' 本来、不要なコントロール 挑戦の記念に 削除せず保留
End Sub
Private Sub Button2Clear_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2Clear.Click
Me.TextBox1URLOriginal.Text = Nothing
Me.TextBox2URLDecorded.Text = Nothing
Me.TextBox3QueryDecode.Text = Nothing
End Sub
Private Sub Button1Close_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1Close.Click
Me.Close()
End Sub
Private Sub TextBox1URLOriginal_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1URLOriginal.TextChanged
If Not Me.TextBox1URLOriginal.Text = Nothing Then
Me.TextBox2URLDecorded.Text = Uri.UnescapeDataString(Me.TextBox1URLOriginal.Text)
Try
Dim url As String = Me.TextBox1URLOriginal.Text
Dim uTarget As New Uri(url)
uriQuery = Uri.UnescapeDataString(uTarget.Query)
ChangeUriQueryLine()
Catch ex As Exception ' 無効な URL 入力・編集時
Me.TextBox3QueryDecode.Text = Nothing
End Try
Else
Me.TextBox3QueryDecode.Text = Nothing
End If
End Sub
Private Sub CheckBox1MultiLine_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox1MultiLine.CheckedChanged
ChangeUriQueryLine()
End Sub
Private Sub ChangeUriQueryLine()
' (uri) Query を表示形式変更
If Me.CheckBox1MultiLine.Checked Then
Me.TextBox3QueryDecode.Text = uriQuery.Replace("&", vbCrLf & "&")
Else
Me.TextBox3QueryDecode.Text = uriQuery
End If
End Sub
Private Sub Button3ClipBoard_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3ClipBoard.Click
If Clipboard.ContainsText() Then
Me.TextBox1URLOriginal.Text = Clipboard.GetText()
End If
End Sub ' ClipBoard Get Text Cording
Private Sub Form1_DragEnter(ByVal sender As System.Object, _
ByVal e As System.Windows.Forms.DragEventArgs) _
Handles MyBase.DragEnter
'Me.AllowDrop = True ' On Loading
' DataFormats の種類を表示 for Debug
'Dim eCheck() As String = e.Data.GetFormats()
'Me.ListBox1.Items.Clear()
'For Each eCheckItem In eCheck
' Me.ListBox1.Items.Add(eCheckItem)
'Next
'URLのみ受入
If e.Data.GetDataPresent("UniformResourceLocator") Or _
e.Data.GetDataPresent("UniformResourceLocatorW") Then
e.Effect = DragDropEffects.Link
Else
e.Effect = DragDropEffects.None
End If
End Sub ' DragDrop Cording(1/2)
Private Sub Form1_DragDrop(ByVal sender As System.Object, _
ByVal e As System.Windows.Forms.DragEventArgs _
) Handles MyBase.DragDrop
Dim urlFrom As String = e.Data.GetData(DataFormats.Text).ToString() ' URL 文字列で取得
Me.TextBox1URLOriginal.Text = urlFrom
End Sub ' DragDrop Cording(2/2)
End Class
各コントロールの名称は、標準状態の名称の後に 用途を示す語句を追加した 名称に変更してあります。
( 例: TextBox1 > TextBox1URLOriginal ) ご注意下さい。
上述の名称さえ気をつければ、 デザイナでコントロール貼り付け後、Form1.vb にそのまま貼り付けて実行可能なコードです。
実行時の画面です。
使ってみて、検索情報の入った URL って、あぁ~ こんなだったのか って言うのが 素直な感想です。
0 件のコメント:
コメントを投稿