歩きながら考えよう

早くなくても止まらず動いてればいいことがある...

久しぶりにASPを書いた

2007年11月14日 | 開発
ある案件で、IIS+ASP+BASP21という構成で、文字コードをUTF-8に変換してからURLエンコードをする、ということが必要になった。

BASP21を使って、下記のように書いても正しくエンコードされないとのこと。

strUrl = objBsp.Kconv("日本語の文字列", 5, 1)
strUtfUrl = objBsp.Base64(strUrl, 4)


というわけで、下記のような関数を作ってみた。

<%
' 文字列をUTF-8にエンコードした後、URLエンコードする
' 
' Utf8UrlEncode(strTarget)
' 入力:
'  strTarget : VBS文字列
'
' 出力:文字コードUTF-8でURLエンコードされた文字列
'
' 使用モジュール:BASP21を使用。
'
Function Utf8UrlEncode(strTarget)
	Dim objBasp
	Dim strUtf8
	Dim i, len, h, c
	Dim strEncoded

	' 空のときは抜ける
	If IsNull(strTarget) Or IsEmpty(strTarget) Or Trim(strTarget) = "" Then
		Exit Function
	End If

	' UTF-8 に変換。結果はバイト文字列
	Set objBasp = Server.CreateObject("basp21")
	strUtf8 = objBasp.Kconv(strTarget, 5)

	' 1バイトずつ取り出しながら、16進数へ変換しエンコード
	len = UBound(strUtf8) + 1
	strEncoded = ""
	For i = 1 To len
		h = Hex(AscB(MidB(strUTF8, i, 1)))
		strEncoded = strEncoded & "%" & h
	Next

	Utf8UrlEncode = strEncoded
End Function '/* end of Utf8UrlEncode(strTarget) */
%>


一応、動作してるっぽいので、よしとする。

別のやり方としては、こんなのもあるらしい。
UTF-8の変換処理(エンコード)に挑戦してみた

最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。