三流君(TOP) /ASPで遊ぶ /記事一覧

文字コード関係で遊ぶ UTF-8からSJISへ変換(検索キーワードを戻す)


ログファイルから、UTF-8のキーワードを戻してみます。
※詳細は、ソースと詳細解説のページを見てください。
テストで上に元のgoogleの検索リンク、下に変換結果を作成しました

発行するSQL:Select * From log Where referrer Like '%UTF-8%' ORDER BY WriteTime DESC
変換前:http://search.yahoo.co.jp/search?p=%EF%BC%B0%EF%BC%B2%EF%BC%AF%EF%BC%A7%EF%BC%B2+%EF%BD%B7%EF%BD%AC%EF%BE%83%EF%BE%9E%EF%BD%A8%EF%BE%8A%EF%BE%9E%EF%BD%AF%EF%BD%B8%EF%BE%9E&ei=UTF-8
変換後:http://search.yahoo.co.jp/search?p=PROGR+キャディバッグ&ei=UTF-8



変換前:http://www.google.co.jp/hws/search?q=NVD-U21J&client=fenrir-sub&channel=selection&safe=off&adsafe=off&hl=ja&lr=lang_ja&ie=UTF-8&oe=UTF-8&start=50&br=
変換後:http://www.google.co.jp/hws/search?q=NVD-U21J&client=fenrir-sub&channel=selection&safe=off&adsafe=off&hl=ja&lr=lang_ja&ie=UTF-8&oe=UTF-8&start=50&br=



変換前:http://search.yahoo.co.jp/search?p=%E6%BF%80%E5%AE%89%E3%80%80%E3%82%A2%E3%83%AA%E3%83%A9%E3%83%B3%E3%81%AE%E8%A9%A9&ei=UTF-8&fr=top_ga1&x=wrt
変換後:http://search.yahoo.co.jp/search?p=激安 アリランの詩&ei=UTF-8&fr=top_ga1&x=wrt



変換前:http://search.yahoo.co.jp/search?p=%E3%83%8A%E3%82%B7%E3%83%A7%E3%83%8A%E3%83%AB++NR-B162J-D+%E3%82%AA%E3%83%AC%E3%83%B3%E3%82%B8&ei=UTF-8&pstart=1&fr=top_ga1&b=11&qrw=0
変換後:http://search.yahoo.co.jp/search?p=ナショナル++NR-B162J-D+オレンジ&ei=UTF-8&pstart=1&fr=top_ga1&b=11&qrw=0



変換前:http://search.yahoo.co.jp/search?p=8386+%E3%83%95%E3%82%A7%E3%83%A9%E3%83%BC%E3%83%AAF%EF%BC%91+%E3%83%AC%E3%83%BC%E3%82%B5%E3%83%BC%EF%BC%91%2F10&ei=UTF-8&pstart=1&fr=slv1-ybb&b=1
変換後:http://search.yahoo.co.jp/search?p=8386+フェラーリF1+レーサー1/10&ei=UTF-8&pstart=1&fr=slv1-ybb&b=1



変換前:http://www.google.com/search?hl=ja&lr=lang_ja&ie=UTF-8&oe=UTF-8&q=%E3%81%A1%E3%81%A1%E3%81%AE%E3%81%88%20%E3%83%94%E3%83%B3%E3%83%8A%E3%83%83%E3%83%97%E3%83%AC%E3%83%87%E3%82%A3&nu
変換後:http://www.google.com/search?hl=ja&lr=lang_ja&ie=UTF-8&oe=UTF-8&q=ちちのえ????????A



変換前:http://search.yahoo.co.jp/search?p=%E7%A5%9E%E7%94%B0%E3%80%80%E3%82%B9%E3%82%AD%E3%83%BC%E3%82%A6%E3%82%A7%E3%82%A2%E3%82%B7%E3%83%A7%E3%83%83%E3%83%97&ei=UTF-8&fr=top_ga1&x=wrt
変換後:http://search.yahoo.co.jp/search?p=神田 スキーウェアショップ&ei=UTF-8&fr=top_ga1&x=wrt



変換前:http://search.yahoo.co.jp/search?p=%E3%83%AC%E3%82%B6%E3%83%BC%E3%83%96%E3%83%AB%E3%82%BE%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%97&search.x=1&fr=top_ga1&tid=top_ga1&ei=UTF-8
変換後:http://search.yahoo.co.jp/search?p=レザーブルゾンショップ&search.x=1&fr=top_ga1&tid=top_ga1&ei=UTF-8



変換前:http://search.yahoo.co.jp/search?p=%E7%9D%80%E3%81%A6%E3%81%BF%E3%81%BE%E5%B0%82%E7%A7%91%E3%80%80%E3%83%A2%E3%83%AC%E3%83%BC%E3%83%8C%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%84&ei=UTF-8&
変換後:http://search.yahoo.co.jp/search?p=着てみま専科 モレーヌショーツ&ei=UTF-8&



変換前:http://search.yahoo.co.jp/search?p=%E3%83%A6%E3%82%A2%E3%83%BC%E3%82%BA+%EF%BC%A8%EF%BC%A9%EF%BC%A4+%E8%A3%85%E7%9D%80&ei=UTF-8&qrw=0&pstart=1&fr=slv1-tbtop&b=191
変換後:http://search.yahoo.co.jp/search?p=ユアーズ+HID+装着&ei=UTF-8&qrw=0&pstart=1&fr=slv1-tbtop&b=191



終了:2009/01/06 15:52:28


コーヒーブレイク たまには寄り道、休憩も(↓広告です):
広告:[2009年度カレンダー] ← 人気のカレンダーを紹介
[カレンダー商品一覧] ← そろそろ来年の準備

ASPサンプルソース(プログラムのソースコード)

詳細解説は[http:/asp/backno/asp099.html]を見てください
下記、/cgi-bin/test/test099-1.aspのソース(中身)です

UTF-8 を 使った ソースコードを紹介する

表示色の説明:ASP VBScriptは <% 〜 %>
キーワードはUTF-8 です。 <%@LANGUAGE=VBScript%> <html> <head><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=x-sjis"> <title>文字コード関係で遊ぶ UTF-8からSJISへ変換(検索キーワードを戻す)</title> </head> <body> <h1>文字コード関係で遊ぶ UTF-8からSJISへ変換(検索キーワードを戻す)</h1> <br> ログファイルから、UTF-8のキーワードを戻してみます。<br> ※詳細は、ソースと詳細解説のページを見てください。<br> テストで上に元のgoogleの検索リンク、下に変換結果を作成しました<br> <hr> <% 'ADO DB Connection オブジェクトを作成 Set db=Server.CreateObject("ADODB.Connection") db.Provider = "Microsoft.Jet.OLEDB.4.0" '接続DBの位置を渡し、DBオープン strDB = "../test/cnt_etc.mdb" db.ConnectionString = Server.MapPath(strDB) db.open 'データベースをオープンする 'お約束のレコードセットの作成 テーブル名logから全項目(*)を指定 'UTF-8のデータをLikeで選択する strSQL = "Select * From log Where referrer Like '%UTF-8%' " strSQL = strSQL & " ORDER BY WriteTime DESC" Set rs = db.Execute(strSQL) 'データの表示を行う Response.Write "発行するSQL:" & strSQL & "<hr>" 'EOFまでループ or 10件まで nCNT = 1 Do While rs.EOF = False And nCNT <= 10 '.EOFがFalseで10以下の間 'リンク元の表示 Response.Write "変換前:<A HREF='" & rs.Fields.Item("referrer") & "' " Response.Write "Target='_blank'>" Response.Write rs.Fields.Item("referrer") & "</A><BR>" '%付のUTF-8コードを変換してみた Response.Write "変換後:" & KANJI_HENKAN(rs.Fields.Item("referrer")) Response.Write "<BR><BR><HR><BR>" '次のレコードにポインタを移動する rs.MoveNext 'これを忘れると悲惨なことに、、、 'カウンタを増やす nCNT = nCNT + 1 Loop '開いていたレコードセットを閉じる rs.Close 'データベースも閉じようよ db.Close 'お行儀よくオブジェクトも開放しましょう(通常は自動的に解放されるけど) Set db = Nothing 'テストで終了時刻の表示 Response.Write "終了:" & Now() & "<hr>" %> <br> </body> </html> <% '変換サブルーチンをまとめる '%の後ろを強引に(手抜きで)変換してみた Function KANJI_HENKAN(strMOJI) Dim strRET strRET = "" 'リターン値を初期化する '特殊文字を手抜きでReplace関数で置き換える strWORK = strMOJI strWORK = Replace(strWORK, "%3F", "?") strWORK = Replace(strWORK, "%2F", "/") strWORK = Replace(strWORK, "%3A", ":") strWORK = Replace(strWORK, "%3D", "=") strWORK = Replace(strWORK, "%26", "&") '+をスペースに変換したいけど、今回はそのまま。 strMOJI = strWORK '特殊文字変換結果の代入 '文字単位でループする For n = 1 To Len(strMOJI) strCHK = Mid(strMOJI, n, 1) '1文字取り出す If strCHK = "%" Then '%の後ろをデコードするかチェック strWORK = Mid(strMOJI, n, 9) '9文字取り出し変換処理へ渡す strRET = strRET & UTF8toSJIS(strWORK) '変換結果を+する n = n + 8 '強引に8文字飛ばす Else 'そのまま strRET = strRET & strCHK 'そのまま+する End If Next KANJI_HENKAN = strRET End Function Function UTF8toSJIS(strCODE) '%E6%96%87 の UTF-8コード文字列をSJISに直す Dim strHEX Dim n 'ループカウンタ Dim i 'ループのカウンタ Dim str2CODE '2進数の文字列 Dim str2UNI 'UNICODE2進数 '1コード目を変換 strHEX = Mid(strCODE, 2, 2) '%を抜かしたコードを取得 str2CODE = HEX16toSTR2(strHEX) '2コード目を変換 strHEX = Mid(strCODE, 5, 2) '%を抜かしたコードを取得 str2CODE = str2CODE & HEX16toSTR2(strHEX) '3コード目を変換 strHEX = Mid(strCODE, 8, 2) '%を抜かしたコードを取得 str2CODE = str2CODE & HEX16toSTR2(strHEX) 'コードを抜き出しコピーする '0 1 2 '1234 5678 9012 3456 7890 1234 '1110 xxxx 10xx xxxx 10xx xxxx を下記に割り当てる 'xxxx xxxx xxxx xxxx str2UNI = Mid(str2CODE, 5, 4) str2UNI = str2UNI & Mid(str2CODE, 11, 6) str2UNI = str2UNI & Mid(str2CODE, 19, 6) '作成した2進数を16進数に直す strHEX = STR2toHEX16(str2UNI) '16進数文字列を数値に直し、さらにChrW関数でSJISに UTF8toSJIS = ChrW(CInt("&H" & strHEX)) End Function 'HEX16進文字列を受け取り2進文字列を返す Function HEX16toSTR2(strHEX) Dim n 'ループカウンタ Dim i 'ループのカウンタ Dim n8421 '8 4 2 1の数値計算用 Dim str2STR Dim nCHK str2STR = "" '結果のエリアを初期化する '文字数分ループする For n = 1 To Len(strHEX) nCHK = 0 '0で初期化 On Error Resume Next 'エラーを無視する nCHK = CInt("&h" & Mid(strHEX, n, 1)) 'n文字目を数値変換 On Error Goto 0 n8421 = 8 '初期値に8を代入する(上からチェックしたいので) For i = 1 To 4 '4回まわるよ If (nCHK And n8421) = 0 Then 'Andでビットをチェックする str2STR = str2STR & "0" 'ビットは立ってないよ Else str2STR = str2STR & "1" 'ビットは立ってるよ End If '次のビットをチェックしたいので2で割る n8421 = n8421 / 2 Next Next 'リターン値をセットして終了 HEX16toSTR2 = str2STR End Function '2進文字列を受け取り16進文字列を返す Function STR2toHEX16(str2) Dim strHEX Dim n 'ループカウンタ Dim i 'ループのカウンタ Dim n8421 '8 4 2 1の数値計算用 Dim nBYTE '頭4文字単位かチェックする n = Len(str2) Mod 4 '足りない文字数を計算する If n <> 0 Then str2 = String(4 - n, "0") & str2 '頭に文字0を追加する End If strHEX = "" '結果のエリアを初期化する '文字数分ループする For n = 1 To Len(str2) Step 4 '4文字(1バイト)単位にループを作る n8421 = 8 '初期値に8を代入する(上から計算したいので) nBYTE = 0 '1バイト計算用変数を初期化 For i = 0 To 3 '4回まわるよ(4ビット分) 'ビットが立っているかチェックする If Mid(str2, n + i, 1) = "1" Then nBYTE = nBYTE + n8421 'ビットに対応した数値を+する End If '次のビットを計算したいので2で割る n8421 = n8421 / 2 Next '計算して、1倍との数値が完成したので16進文字にしてセットする strHEX = strHEX & Hex(nBYTE) Next 'リターン値をセットして関数を抜ける STR2toHEX16 = strHEX End Function %>

人気の書籍を紹介します

  1. [4808585154]- おつまみ一行レシピ―〓(きき)酒師がつくる (vela BOOKS)
  2. [4103168110]- 死んだら何を書いてもいいわ―母・萩原葉子との百八十六日
  3. [4904076087]- スーパーカー誕生
  4. [434401586X]- 死刑基準
  5. [4822281108]- ピープルウエア 第2版 - ヤル気こそプロジェクト成功の鍵
  6. [4833418932]- 面白法人カヤック会社案内

評価や感想気軽に送っていただけると嬉しいです

HPを読んだ満足度(評価)は?
5満足(参考になった)
4まぁまぁ(一部参考になった)
3普通(どちらとも言えない)
2なんかなぁ(期待と違った)
1不満(読んで損した気分)
作者に感想・質問を送る(気軽に質問・感想書いてください)
あなたのお名前(ニックネーム) さん

作者からの返信は、 不用 E-mail で受信したい
*質問・感想はメルマガで紹介する場合があります
※Ken3への連絡先 → [メール@アドレス]です。気軽に問い合わせてください

Googleで関連項目を検索する

LANGUAGE=VBScript + [キーワード:UTF-8] Sub|Function プログラム|プログラミング
↓で検索するとプログラムの例 Sub/Function でまとまったHP

Google

あれ?私のページが検索に載ってない(笑)一度お試しを(私のページに、また戻ってきてね(爆))

三流解説とリンクページを紹介

ASP系の解説を項目ごとにまとめてみました

[ASP Form等を使用したデータのやり取り]
[ASP その他処理サンプル]
[ASP テキストファイル処理]
[ASP VBScript関数関係の説明]
[ASP ADOでMdbファイルを使う]
[ASP ADOでExcelと接続してみた]

その他:blogや広告↓
[日記的なblog]← あまり更新してないけど・・・
[三流なプログラムコード]← 恥ずかしいのであまり載せてないけど・・・
[通販商品の足跡を紹介]←通販商品などを紹介してます



旅行ガイドブックを購入する

ハードなプロジェクトが完了したら、少しリフレッシュしてみては?
[旅行情報・ガイドブックを探す]
最近聞かなくなったけど、システムの打ち合わせを合宿でやる・・・とか
※実際は旅館で一杯、親睦会って感じだけど。
現在時刻は、2009/01/06 15:52:28です。
[Topへ戻る] −−>[ASP系へ戻る] −−>[バックナンバーを見る]