三流君ASPで遊ぶ、失敗する

[トップページへ] [バックナンバーを読む] [質問感想をBBSへ]
[ ASPでMdbが使用可能 レンタルサーバー紹介] [SOHO/在宅プログラマー/派遣] [ ...サイトマップ(総合案内へ)]



分類別ガイド
( ADOで[ Mdb接続],[ Excel接続],[ CSV接続] [ Formデータやりとり ]/[ TextFile]/[ VBScript]/[ その他サンプル] )

バックナンバー No.95 〜 No.99


No.95 2004/06/06
On Error Resume Next でエラー発生時次の行へ
[ページTOPへ戻る]

<On Error Resume Next でエラー発生時次の行へ>

こんにちは、三流プログラマーのKen3です。 今回は、 On Error Resume Next でエラー発生時次の行へ そんな処理を書いてみます。

/* * 1.今回のキッカケ */

自作した16進数から2進文字列の作成ルーチン http://www.ken3.org/cgi-bin/test/test094-1.asp で、 16進数に無い、G2,H1とか指定すると、実行時エラーでプログラムが止まります。 キレイナ16進数を送って来いと強気に出られない時もあるので、 修正方法・対応を考えてみました。

/* * 2.問題のエラー */

http://www.ken3.org/cgi-bin/test/test094-1.asp?DATA=F2 では、 F2を変換するとき、1文字目のFを a = CInt("&H" & "F") と&Hを付け、 文字列から数値変換の標準関数Cintを使い変換してます。 ここで、Gなど、16進数表記外の文字を渡すと、 Microsoft VBScript 実行時エラー エラー '800a000d' 型が一致しません。: 'CInt' /cgi-bin/test/test094-1.asp, 行 62 と実行時エラーが発生してました。 ひとつの回避案は、 0〜9,a〜f,A〜Fの文字かチェックする方法です、 事前にチェックを入れ、キレイなデータを通せばいい、そんな考えです。 それだと、一般的過ぎるので(オイオイ) 今回は、その考えから離れて、エラーを無視するそんな手抜きをやってみます。

/* * 3. On Error Resume Next でエラー発生時次の行へ(実行時エラーを無視) */

On Error Resume Next と、エラー発生時次の行へ、そんな命令があります。 こいつを使用して、 On Error Resume Next 'エラー発生時次の行へ nCHK = 0 '0で初期化 nCHK = CInt("&h" & Mid(strHEX, n, 1)) 'n文字目を数値変換 On Error Goto 0 'エラー処理を通常に戻す としてみました。 まず、 On Error Resume Nextでエラー時次の行に進むことにします。 nCHK = 0 変数を0で初期化します。 nCHK = CInt("&h" & Mid(strHEX, n, 1)) CIntで変換します。 ここで、もしGやHなどでエラーが発生した場合、 On Error Resume Nextが指定してあるので、次の行に処理が移ります。 結果的に何もしないで処理が進みます。nCHKに0を入れてあるので0で進みます。 エラーが発生したら0だ、そんな処理にしてしまいました。 http://www.ken3.org/cgi-bin/test/test095-1.asp?DATA=G1 で、テストできるので、 下記のエラーが発生する http://www.ken3.org/cgi-bin/test/test094-1.asp との違いを見てください。 ↓On Error Resume Next を使ったソース <% '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)
        On Error Resume Next   'エラー発生時次の行へ
        nCHK = 0 '0で初期化
        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
%>

/* * 4.終わりの挨拶 </HTML> */

今回は、 実行時エラーを無視して、進んでみました。 キレイなデータが来ない場合もあるので、要注意ですね・・・・ 人生にも On Error Resume Next があれば・・・と思いつつ。。。 何かの参考となれば幸いです。 ASP、VBScript勉強中の三流プログラマーのKen3でした。
No.95を読んだ満足度(評価)は?
5満足(参考になった)
4まぁまぁ(一部参考になった)
3普通(どちらとも言えない)
2なんかなぁ(期待と違った)
1不満(読んで損した気分)
作者に感想・質問を送る(気軽に質問・感想書いてください)
あなたのお名前(ニックネーム) さん

作者からの返信は、 不用 掲示板 E-mail で受信したい
*質問・感想はメルマガで紹介する場合があります

No.96 2004/06/07
BASE64の変換処理に挑戦してみた
[ページTOPへ戻る]

<BASE64の変換処理に挑戦してみた>

こんにちは、三流プログラマーのKen3です。 今回は、VBA系でも発行したけど、 BASE64の変換処理にチャレンジしてみました。

/* * 1.今回のキッカケ */

自作した16進数から2進文字列の作成ルーチン http://www.ken3.org/cgi-bin/test/test094-1.asp を使わないとなぁ・・・なんて思ってたら、 VBA系でBASE64の変換をやってみたので、こっちでもほぼコピー発行です。

/* * 2.BASE64って何? */

BASE64って何?私の知識でこの単語が引っかかるのは、 メールで添付フアイルを送る時、BASE64って単語を見たことがある程度です。 よし、Yahoo と Googleで探してみるか。(最近検索結果が違うので探りを兼ねて) GoogleでBASE64をキーワードに探すと、 http://www.google.co.jp/search?hl=ja&ie=UTF-8&q=BASE64&lr=lang_ja (日本語のページを探しました) BASE64とは何か : IT用語辞典 ─ 用語解説 ─ 意味 ... http://e-words.jp/w/BASE64.html が一番上に出てきます。(2004/6/6現在) う〜ん、ここは用語説明でした、、、 上から3つ目に、 BASE64 について http://www.sea-bird.org/doc/Cygwin/BASE64enc.html とサイトがあり、 >1.エンコードすべきデータから、3バイト取得する。 >2.取得した3バイトを24ビットのデータ領域に設定する。 >3.上位から6ビットを取り出し、その数値を下記の変換テーブルに従い >キャラクター文字に変換する。 >4.次の6ビット以降も同じ変換を行い、24ビットすべて変換する。 >5.エンコードすべきデータが無くなるまで、1〜4の作業を繰り返す。 > ※エンコードすべきデータが、2バイトしか無い場合は、それまでBASE64 >エンコード変換した文字列の最終位置に'='を付加する。 > ※エンコードすべきデータが、1バイトしか無い場合は、それまでBASE64 >エンコード変換した文字列の最終位置に'=='を付加する。 > >変換テーブル:6ビットデータの「0〜63」を以下の文字列に変換する。 > 0 〜25:A〜Z > 26〜51:a〜z > 52〜61:0〜9 > 62 :+ > 63 :/ と、丁寧に変換方法が載ってました。 YahooでBASE64を検索しても、いろいろなページがヒットします。 http://search.yahoo.co.jp/bin/query?p=BASE64&hc=0&hs=0 読んでいくと、 6ビット単位にデータを取り出し、それを指定された文字に当てはめる。 って感じです。

/* * 3.さっそく作ってみた */

手抜きで、漢字2バイトには対応していないが、 下記のように作ってみました。 ※なんか無駄に長いんだけど、気にしないでね。 <% 'BASE64の変換処理にチャレンジする 全角文字未対応
Function BASE64TEST(strMOJI)

    Dim strWORK
    Dim strCODE
    Dim n, i
    Dim nAMARI
    Dim n6BOX(5)  '6ビット取り出した数値
    Dim nCODE
    Dim strRET
    
    strRET = ""  'リターン値を初期化する
    
    For n = 1 To Len(strMOJI) Step 3
        '3バイトを2進数に変換する、24ビットの数値を作成する
        strWORK = ""
        nAMARI = 0
        For i = 0 To 2
            strCODE = Mid(strMOJI, n + i, 1) '文字を取り出す
            If strCODE = "" Then
                nAMARI = 3 - i
                strWORK = strWORK & "00000000"
                Exit For
            Else  'コードに変換する
                strWORK = strWORK & HEX16toSTR2(Hex(Asc(strCODE)))
            End If
        Next

        '8*3の24ビット2進数から6ビット単位で4つ取り出し、数値に変換する
        For i = 0 To 3
            n6BOX(i) = CInt("&H0" & STR2toHEX16(Mid(strWORK, 1 + i * 6, 6)))
        Next
        '対応表にそって変換する
        '6ビットデータの「0〜63」を以下の文字列に変換する。
        '  0 〜25:A〜Z
        '  26〜51:a〜z
        '  52〜61:0〜9
        '  62    :+
        '  63    :/
        For i = 0 To 3 - nAMARI
            If n6BOX(i) = 63 Then strRET = strRET & "/"
            If n6BOX(i) = 62 Then strRET = strRET & "+"
            '  0 〜25:A〜Z
            If 0 <= n6BOX(i) And n6BOX(i) <= 25 Then
                strRET = strRET & Chr(Asc("A") + n6BOX(i) - 0)
            End If
            '  26〜51:a〜z
            If 26 <= n6BOX(i) And n6BOX(i) <= 51 Then
                strRET = strRET & Chr(Asc("a") + n6BOX(i) - 26)
            End If
            '  52〜61:0〜9
            If 52 <= n6BOX(i) And n6BOX(i) <= 61 Then
                strRET = strRET & Chr(Asc("0") + n6BOX(i) - 52)
            End If
        Next 
        'あまりの文字分=を追加する
        If nAMARI = 1 Then strRET = strRET & "="
        If nAMARI = 2 Then strRET = strRET & "=="
    Next

    BASE64TEST = strRET

End Function
%>
処理のポイントは、 ^^^^^^^^^^^^^^^^^^ For n = 1 To Len(strMOJI) Step 3 で、3文字単位のループを作り(Step3で3文字飛ばす) '3バイトを2進数に変換する、24ビットの数値を作成する strWORK = "" nAMARI = 0 For i = 0 To 2 strCODE = Mid(strMOJI, n + i, 1) '文字を取り出す If strCODE = "" Then nAMARI = 3 - i strWORK = strWORK & "00000000" Exit For Else 'コードに変換する strWORK = strWORK & HEX16toSTR2(Hex(Asc(strCODE))) End If Next 上記で、24ビット8ビット*3の2進数文字列を作成し、 そこから、6ビット単位でデータを取り出し、再び数値に変換。 '8*3の24ビット2進数から6ビット単位で4つ取り出し、数値に変換する For i = 0 To 3 n6BOX(i) = CInt("&H0" & STR2toHEX16(Mid(strWORK, 1 + i * 6, 6))) Next ここまでで、6ビット単位の4つの数値が完成する。 で、その数値を、対応表にしたがって、文字に直します。 '対応表にそって変換する '6ビットデータの「0〜63」を以下の文字列に変換する。 ' 0 〜25:A〜Z ' 26〜51:a〜z ' 52〜61:0〜9 ' 62 :+ ' 63 :/ For i = 0 To 3 - nAMARI If n6BOX(i) = 63 Then strRET = strRET & "/" If n6BOX(i) = 62 Then strRET = strRET & "+" ' 0 〜25:A〜Z If 0 <= n6BOX(i) And n6BOX(i) <= 25 Then strRET = strRET & Chr(Asc("A") + n6BOX(i) - 0) End If ' 26〜51:a〜z If 26 <= n6BOX(i) And n6BOX(i) <= 51 Then strRET = strRET & Chr(Asc("a") + n6BOX(i) - 26) End If ' 52〜61:0〜9 If 52 <= n6BOX(i) And n6BOX(i) <= 61 Then strRET = strRET & Chr(Asc("0") + n6BOX(i) - 52) End If Next ↑オイオイって感じのIf文の羅列ですがご勘弁を。 ↓変換文字が余っていたら=をプラスしてます。 'あまりの文字分=を追加する If nAMARI = 1 Then strRET = strRET & "=" If nAMARI = 2 Then strRET = strRET & "==" Next と、こんな感じで、3文字単位で変換しました。 ※漢字には非対応なので、2バイト文字を使う人は、一工夫してくださいね。

/* * 4.終わりの挨拶 </HTML> */

今回は、 BASE64の変換をやってみた、そんなお話でした。 ※強引に2進数と16進数文字列の関数を使ってみました。 http://www.ken3.org/cgi-bin/test/test096-1.asp でテストできます、何かの時、使ってみてください。 何かの参考となれば幸いです。 ASP、VBScript勉強中の三流プログラマーのKen3でした。
No.96を読んだ満足度(評価)は?
5満足(参考になった)
4まぁまぁ(一部参考になった)
3普通(どちらとも言えない)
2なんかなぁ(期待と違った)
1不満(読んで損した気分)
作者に感想・質問を送る(気軽に質問・感想書いてください)
あなたのお名前(ニックネーム) さん

作者からの返信は、 不用 掲示板 E-mail で受信したい
*質問・感想はメルマガで紹介する場合があります

No.97 2004/06/28
UTF-8の変換処理(エンコード)に挑戦してみた
[ページTOPへ戻る]

<UTF-8の変換処理(エンコード)に挑戦してみた>

こんにちは、三流プログラマーのKen3です。 今回は、 UTF-8の変換処理(エンコード)にチャレンジしてみました。

/* * 1.今回のキッカケ */

下記のような、訪問者保存のプログラムを組んでログの解析をしてます。 HTML側に <script language=javascript> document.write ("このページの更新日は、" + document.lastModified +"です<BR>"); var Referrer=window.document.referrer; if (window.navigator.appName=='Netscape'){ if(parseInt(window.navigator.appVersion)> 4 ){ document.write ("<img src='/cgi-bin/cnt/cnta.asp?Referrer="+Referrer+"'>");} }else{ document.write ("<img src='/cgi-bin/cnt/cnta.asp?Referrer="+Referrer+"' style=\"display\:none\"> ");} </script> と、 画像の処理に見せかけて、cnta.aspをコールして、 ^^^^^^^^^^^^^^^^^^^^^^^ cnta.aspで、 WTIME = Now '現在時刻の代入 IP = Request.ServerVariables("REMOTE_ADDR") URL = Request.ServerVariables("HTTP_REFERER") referrer = Mid(Request.ServerVariables("QUERY_STRING"), 10) を書き込んでます。 http://www.ken3.org/cgi-bin/cnt/log100.asp で、リンク元などを確認してます。 リンク元をみてみると、 http://www.google.co.jp/search?q=%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB などのコードが保存されてます。 q=が検索文字列だと思うのですが、 E38395ってなんだ?どうしても変換方法が見つかりませんでした また、別のログデータからコード体系らしい部分を見ると、 ie=utf8&oe=utf8&querytime=8TuE& このUTF8ってのが怪しそうです。

/* * 2.UTF-8のデータ構造を調べてみた */

ネタをバラすと、バイナリの保存を調べていたら、 たまたま、UTF8の記事を見かけたので脱線発行してます。 ※廃刊にした有料版のメルマガをベースにして発行してます。 話が噛み合わないところは、気にしないで下さい。 何を見たか?下記のようなコードの表を見ました。 http://www.asahi-net.or.jp/~CI5M-NMR/w3/rfc2279.txt より UCS-4 range (hex.) UTF-8 octet sequence (binary) 0000 0000-0000 007F 0xxxxxxx 0000 0080-0000 07FF 110xxxxx 10xxxxxx 0000 0800-0000 FFFF 1110xxxx 10xxxxxx 10xxxxxx 0001 0000-001F FFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx 0020 0000-03FF FFFF 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 0400 0000-7FFF FFFF 1111110x 10xxxxxx ... 10xxxxxx と、変換表(規則)が書いてあった。 ※binaryの単語で引っかかったと思う。 これを見て、手で変換してみた。 http://www.google.co.jp/search?q=%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB がファイルを指定してます。 %E3%83%95 フ %E3%82%A1 ァ %E3%82%A4 イ %E3%83%AB ル とUTF-8でコード付けされてます。 ファイルの[フ]がE3 83 95かぁこれを2進数に直すと。 E 3 8 3 9 5 1110 0011 1000 0011 1001 0101 となります。 ここから、 0000 0800-0000 FFFF 1110xxxx 10xxxxxx 10xxxxxx の規則でxxxxの実データを取り出すと(1110 10 10は固定のコードなので) E 3 8 3 9 5 1110 0011 1000 0011 1001 0101 xxxx xx xxxx xx xxxx から xの部分を取り出すと、 0011 00 0011 01 0101 となり、わかりやすく、 0011 0000 1101 0101 として16進に直すと 30D5となるが、これはUNICODEらしい。 これをシフトJISに変換すれば、 UTF-8のデータを取り出せそうです。

/* * 3.UNICODEと言われてもなぁ ASCW関数で単純に変換してみた */

UNICODEと言われてもなぁ、どうやって変換するんだろう? 悩んでいたら、ASCWとCHRWがUnicode コード ポイントをやり取りするみたいです。 ASCとASCW関数 http://www.microsoft.com/japan/msdn/library/ja/vblr7/html/vafctasc.asp CHRとCHRW関数 http://www.microsoft.com/japan/msdn/library/ja/vblr7/html/vafctchr.asp に書いてありました。 ASC関数とASCW関数の違いを見るために、 下記の確認プログラムを作ってみました。 単純にASCとASCWで変換しただけですが。 CHK_DATA = Request.QueryString("DATA") 'パラメータの代入 '長さをチェックする If Len(CHK_DATA) <> 0 Then '文字が入っていたら Response.Write "受け取ったデータは[<b>" Response.Write Server.HTMLEncode(CHK_DATA) & "</b>]です<br>" '結果をテーブルで表示する Response.Write "<table border=1><tr>" Response.Write "<th>n文字目</th>" Response.Write "<th>調査する文字</th>" Response.Write "<th>ASC結果(16進)</th>" Response.Write "<th>ASCW結果(16進)</th>" Response.Write "</tr>" & vbCrLf '文字数分ループして、コードを表示 For n = 1 To Len(CHK_DATA) Response.Write "<tr>" Response.Write "<td>" & n & "</td>" strWORK = Mid(CHK_DATA, n, 1) 'n番目の文字を取り出す Response.Write "<td>" & Server.HTMLEncode(strWORK) & "</td>" Response.Write "<td>" & Hex(Asc(strWORK)) & "</td>" 'ASCで変換 Response.Write "<td>" & Hex(AscW(strWORK)) & "</td>" 'ASCWで変換 Response.Write "</tr>" & vbCrLf Next Response.Write "</table>" & vbCrLf End If 三流君ASPを変換すると、下記でテストすると、 http://www.ken3.org/cgi-bin/test/test097-1.asp?DATA=%8EO%97%AC%8CNASP n文字目 調査する文字 ASC結果(16進) ASCW結果(16進) 1 三 8E4F 4E09 2 流 97AC 6D41 3 君 8C4E 541B と変換されます。 おっと、確認したいのは、ファイルのフのコードだった、 http://www.ken3.org/cgi-bin/test/test097-1.asp?DATA=%83t%83@%83C%83%8B で確認すると、 n文字目 調査する文字 ASC結果(16進) ASCW結果(16進) 1 フ 8374 30D5 2 ァ 8340 30A1 3 イ 8343 30A4 4 ル 838B 30EB と表示されました。 30D5のコードにやっとたどり着きました。

/* * 4.SJISをUTF-8に直す */

さてと、 では、本題の何も意識しないで使用しているシフトJISをUTF-8に直してみます。 SJISをASCW関数でUNICODEに変換してから、 そのコードを2進数に直す。 2進数を固定のビットを立てたコードに当てはめて、 再び16進数に戻す。そのとき%を付けた文字列にする。 なんか、かったるいけど、チャレンジしてみます。 三流君ASP http://www.ken3.org/cgi-bin/test/test097-2.asp?DATA=%8EO%97%AC%8CNASP で AB型 三流 http://www.ken3.org/cgi-bin/test/test097-2.asp?DATA=AB%8C%5E+%8EO%97%AC テストできます。 ソースは長いけど、 下記のような感じです。 ポイントは、ASCWでUNICODEにして、2進数に変換後、 変換した16ビットを 'xxxx xxxx xxxx xxxx を下記に割り当てる '1110xxxx 10xxxxxx 10xxxxxx と、指定位置に割り当てただけです。 test097-2.asp <%@LANGUAGE=VBScript%> <html> <head> <title>文字コード関係で遊ぶ SJISからUTF-8へ変換テスト</title> </head> <body> <h1>文字コード関係で遊ぶ SJISからUTF-8へ変換テスト</h1> <br> 受け取った文字列に対して、<br> ASCW関数でUNICODEにして、それをオリジナルのUTF-8変換関数を使い、変換します<br> ※詳細は、ソースと詳細解説のページを見てください。<br> テストでgoogleの検索リンクを作成しました<br> <hr> <% CHK_DATA = Request.QueryString("DATA") 'パラメータの代入 '長さをチェックする If Len(CHK_DATA) <> 0 Then '文字が入っていたら Response.Write "受け取ったデータは[<b>" Response.Write Server.HTMLEncode(CHK_DATA) & "</b>]です<br>" '結果をテーブルで表示する Response.Write "<table border=1><tr>" Response.Write "<th>n文字目</th>" Response.Write "<th>調査する文字</th>" Response.Write "<th>ASC結果(16進)</th>" Response.Write "<th>ASCW結果(16進)</th>" Response.Write "<th>UTF8結果(%付16進)</th>" Response.Write "</tr>" & vbCrLf '文字数分ループして、コードを表示 strUTF8 = "" '空文字で初期化 For n = 1 To Len(CHK_DATA) Response.Write "<tr>" Response.Write "<td>" & n & "</td>" strWORK = Mid(CHK_DATA, n, 1) 'n番目の文字を取り出す Response.Write "<td>" & Server.HTMLEncode(strWORK) & "</td>" Response.Write "<td>" & Hex(Asc(strWORK)) & "</td>" 'ASCで変換 Response.Write "<td>" & Hex(AscW(strWORK)) & "</td>" 'ASCWで変換 '2バイト、漢字か判断 手抜きでLen関数で文字数を見た If Len(Hex(Asc(strWORK))) <= 2 Then If Asc(strWORK) <= &H20 Then '制御コードか? strCODE = "%" & Right("0" & HEX(ASC(strWORK)), 2) Else '英数はそのまま+する strCODE = strWORK End If Else strCODE = SJIStoUTF8(strWORK) '変換関数を呼ぶ End If Response.Write "<td>" & strCODE & "</td>" '結果を表示 strUTF8 = strUTF8 & strCODE '結果の文字列をつなげる Response.Write "</tr>" & vbCrLf Next Response.Write "</table><hr>" & vbCrLf Response.Write "受け取ったデータ[<b>" Response.Write Server.HTMLEncode(CHK_DATA) & "</b>]が<br>" Response.Write Server.HTMLEncode(strUTF8) & "となります<br>" Response.Write "テストでGoogleでコードをq=で指定してみます<br>" strURL = "http://www.google.co.jp/search?hl=ja&ie=UTF-8&q=" & strUTF8 Response.Write "<a Href='" & strURL & "' target='_blank'>" Response.Write Server.HTMLEncode(strURL) & "</a><br>" Response.Write "↑をクリックすると?チャント飛べましたか?" & vbCrLf End If %> <HR> <FORM ACTION="test097-2.asp" METHOD="GET"> 調査したい文字列を入力してください。<br> <INPUT TYPE="text" SIZE="30" NAME="DATA" VALUE="<%=CHK_DATA%>"> <INPUT TYPE="submit" VALUE="コード調査開始"><br> ↑いろいろと遊んでみてください↑ </FORM> <br> </body> </html> <% 'UNIコードの文字列を受け取り、UTF8コードの%付文字列を返す
Function SJIStoUTF8(strSJIS)

    strUNICODE = ASCW(strSJIS)  'ASCWでユニコードにする

    'コードを2進にしてワークに代入する
    strWORK2 = HEX16toSTR2(HEX(strUNICODE))

    '切り取って、UTF8の2進数を作成する
    'xxxx xxxx xxxx xxxx を下記に割り当てる
    '1110xxxx 10xxxxxx 10xxxxxx
    strUTF8CODE = "1110" & Mid(strWORK2, 1, 4)
    strUTF8CODE = strUTF8CODE & "10" & Mid(strWORK2, 5, 6)
    strUTF8CODE = strUTF8CODE & "10" & Mid(strWORK2, 11, 6)

    '作成した2進数を16進数に戻す
    strWORK16 = STR2toHEX16(strUTF8CODE)

    '%を付けて格納
    strRET = ""  'リターン値を初期化
    strRET = strRET & "%" & Mid(strWORK16, 1, 2) '%を付けた文字列を作成
    strRET = strRET & "%" & Mid(strWORK16, 3, 2) 
    strRET = strRET & "%" & Mid(strWORK16, 5, 2) 

    'リターン値を代入
    SJIStoUTF8 = strRET

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)
        On Error Resume Next   'エラー発生時次の行へ
        nCHK = 0 '0で初期化
        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
%>

/* * 5.終わりの挨拶 </HTML> */

今回は、 Googleなどのパラメータでよく見かける、UTF-8のコードを探ってみました。 自作のコードなので穴がありますが、何かの参考になれば・・・うれしいです。 ほかにも、amazon.comなどがUTF-8を使ってます。 転職をキーワードにしたリンクだと、 search?tag=ken3book-22&keyword=%E8%BB%A2%E8%81%B7&mode=blended と、tag=が自分のIDで次のkeyword=がUTF-8で指定したキーワードです。 動的に変更したキーワードのページを作るなら、test097-2.aspを応用して、 test097-3.aspを作成してみました。 儲かる http://www.ken3.org/cgi-bin/test/test097-3.asp?DATA=%96%D7%82%A9%82%E9 娘。 http://www.ken3.org/cgi-bin/test/test097-3.asp?DATA=%96%BA%81B 転職 http://www.ken3.org/cgi-bin/test/test097-3.asp?DATA=%93%5D%90E なんて感じで、ASPでキーワードを受け取り反応するプログラムを作れたり、 応用すれば、DBで人気キーワードを管理して、うまく使えるかも。 ※その応用ネタが難しかったりするんだけど・・・ 何かの参考となれば幸いです。 ASP、VBScript勉強中の三流プログラマーのKen3でした。
No.97を読んだ満足度(評価)は?
5満足(参考になった)
4まぁまぁ(一部参考になった)
3普通(どちらとも言えない)
2なんかなぁ(期待と違った)
1不満(読んで損した気分)
作者に感想・質問を送る(気軽に質問・感想書いてください)
あなたのお名前(ニックネーム) さん

作者からの返信は、 不用 掲示板 E-mail で受信したい
*質問・感想はメルマガで紹介する場合があります

No.98 2004/06/30
ASP VBScriptとJavaScripの混在(encodeURI関数を使いたい)
[ページTOPへ戻る]

<ASP VBScriptとJavaScripの混在(encodeURI関数を使いたい)>

こんにちは、三流プログラマーのKen3です。 今回は、 <SCRIPT LANGUAGE="JavaScript" RUNAT="server"> と記述して、JavaScriptの関数を書き、 その関数をASP VBScriptから呼んでみます。 また、クライアントで実行されるJavaスクリプトと混在して実行させてみました。 ※言語や実行場所がゴチャゴチャして、頭が変になりそうだけど。

/* * 1.今回のキッカケ */

前回、UTF-8の変換をボロボロになりながら作りました。 三流君ASP http://www.ken3.org/cgi-bin/test/test097-2.asp?DATA=%8EO%97%AC%8CNASP 娘。 http://www.ken3.org/cgi-bin/test/test097-3.asp?DATA=%96%BA%81B 転職 http://www.ken3.org/cgi-bin/test/test097-3.asp?DATA=%93%5D%90E など、自作のSJISからUTF-8の変換ルーチンを作って回しました。 発行後、下記のメールをいただきました。 --- >javascriptのencodeURI関数を使えばUTF-8でエンコードできるだろボケ!! >速度の遅いバグ付の関数を世の中に出すな!! --- と一言・二言・みこと、助言をいただきました。 (助言か?これ?※天然ボケの三流プログラマーなので助言と受け取りました)

/* * 2.VBScript と JavaScript の 混在 */

>javascriptのencodeURI関数を使えばUTF-8でエンコードできるだろボケ!! って言われてもなぁ、Excel VBA歴が長いんで、 ASPでJavaScript使えても、VBScriptを選択してるんだよなぁ。 JavaScriptには、用意されているんだぁ変換関数、いいなぁ〜 って話じゃなくて、助言してくれているんだから、なにかありそうな。 共通の変数、Application("XXXX")とアプリの変数経由でできるのかなぁ。 VBScript JavaScript 混在 を キーワードにGoogleで探す。 すると、えっこんなことできるの? 百聞は一見に・・・まず、 下記のような感じで、RUNAT="Server"を指定する。 <SCRIPT LANGUAGE="JavaScript" RUNAT="Server"> function TestJavaFunction(n) { return ( n * 12); //受け取った数に*12して返す } </SCRIPT> <%=TestJavaFunction(10)%> とコールすると 120と結果が返ります。 http://www.ken3.org/cgi-bin/test/test098-1.asp でテストできるので、ソースと合わせて混在を確認してください。

/* * 3.JavaScriptのencodeURI関数を使ってみた */

よし、これで変換できるなら、 JavaScriptのencodeURI関数を使ってtest097-3.aspを変更してみます。 と思ったら、 encodeURIって関数のコールで失敗している。。。 う〜ん、なんだろう? encodeURIをキーワードに検索すると、 http://www.microsoft.com/japan/msdn/library/ja/jscript7/html/jsmthfencodeuri.asp >解説 >encodeURI メソッドはエンコードした URI を返します。 >結果を decodeURI に渡すと、元の文字列が返されます。 >encodeURI メソッドは、「:」、「/」、「;」、「?」の各文字はエンコードしません。 >これらの文字をエンコードする場合、encodeURIComponent を使用します。 > >必要条件 >バージョン 5.5 バージョン5.5かぁ。 RUNAT="Server"じゃなくてクライアントでテストをやってみます。 ※IISのバージョンによっては、まだ未サポートなのかも。 クライアントのJavaScriptでUFT-8変換して、 document.write で結果を出力してみたいと思います。 ポイントは、 サーバー側で変数処理を行って、 クライアントで実行されるプログラムで、 msg = "<%=CHK_DATA%>" として、文字列を渡してます(渡しているように見せかけてます) こんな方法がいいのか、わかりませんが、 一つの方法として頭のスミにでも。 下記、 http://www.ken3.org/cgi-bin/test/test098-2.asp の一部です。ソース全体は↑をみてください。 <% 'ここはサーバーで実行される CHK_DATA = Request.QueryString("DATA") 'データを変数に保存 '長さをチェックする If Len(CHK_DATA) = 0 Then '文字が入っていなかったら CHK_DATA = "システム開発" '初期値を入れてみた End If %> <hr> <script language=javascript> //ここはクライアントのJavaScriptの世界です var msg; var strurl; msg = "<%=CHK_DATA%>" document.write (msg + "←変数渡ったかなぁ<br>"); //encodeURI関数を使ってみる document.write (encodeURI(msg) + "←変換結果<br>"); //リンクを作る document.write ("↓googleのリンクを作ってみます<br>"); strurl = "http://www.google.co.jp/search?hl=ja&ie=UTF-8&q="; strurl = strurl + encodeURI("<%=CHK_DATA%>"); document.write ("<a Href='"+strurl+"'>"+strurl+"</a><br>"); document.write ("↑無事飛べましたか?<br>"); </script> <hr> テストデータの入力<br> <FORM ACTION="test098-2.asp" METHOD="GET"> テストしたい文字列を入力してください。<br> <INPUT TYPE="text" SIZE="30" NAME="DATA" VALUE="<%=CHK_DATA%>"> <INPUT TYPE="submit" VALUE="変換開始"><br> ↑いろいろと遊んでみてください↑ </FORM> 今回作成のクライアントJavaScriptのencodeURI関数試用版 三流君ASP http://www.ken3.org/cgi-bin/test/test098-2.asp?DATA=%8EO%97%AC%8CNASP 娘。 http://www.ken3.org/cgi-bin/test/test098-2.asp?DATA=%96%BA%81B 転職 http://www.ken3.org/cgi-bin/test/test098-2.asp?DATA=%93%5D%90E と 前回作成のASPで自作UTF-8変換版 三流君ASP http://www.ken3.org/cgi-bin/test/test097-2.asp?DATA=%8EO%97%AC%8CNASP 娘。 http://www.ken3.org/cgi-bin/test/test097-3.asp?DATA=%96%BA%81B 転職 http://www.ken3.org/cgi-bin/test/test097-3.asp?DATA=%93%5D%90E 違いや処理方法を比べてみてください。

/* * 4.終わりの挨拶 </HTML> */

今回は、混在をキーワードに、 VBScriptとJavaScriptの混在、 サーバー側とクライアント側のスクリプトの混在、 そんな感じで書いてみました。 なんだか、複雑怪奇にしてしまってますが、 JavaScriptの関数だと楽な時(使いたい場合など) 一つの案として、受け取ってください。 何かの参考となれば幸いです。 ASP、VBScript勉強中の三流プログラマーのKen3でした。
No.98を読んだ満足度(評価)は?
5満足(参考になった)
4まぁまぁ(一部参考になった)
3普通(どちらとも言えない)
2なんかなぁ(期待と違った)
1不満(読んで損した気分)
作者に感想・質問を送る(気軽に質問・感想書いてください)
あなたのお名前(ニックネーム) さん

作者からの返信は、 不用 掲示板 E-mail で受信したい
*質問・感想はメルマガで紹介する場合があります

No.99 2004/07/04
UTF-8からSJISの変換処理(デコード)に挑戦してみた
[ページTOPへ戻る]

<UTF-8からSJISの変換処理(デコード)に挑戦してみた>

こんにちは、三流プログラマーのKen3です。 今回は、UTF-8からSJISの変換ルーチンを自作してみます。 いつもの三流的なアプローチなので、実際はアレンジして使ってください。

/* * 1.今回のキッカケ */

SJISからUTF-8の変換をボロボロになりながら作りました。 三流君ASP http://www.ken3.org/cgi-bin/test/test097-2.asp?DATA=%8EO%97%AC%8CNASP 娘。 http://www.ken3.org/cgi-bin/test/test097-3.asp?DATA=%96%BA%81B 転職 http://www.ken3.org/cgi-bin/test/test097-3.asp?DATA=%93%5D%90E など、自作のSJISからUTF-8の変換ルーチンを作って回しました。 今回は、逆の、UTF-8からSJISの変換ルーチンを自作してみます。 また、自作するの?encodeURIの逆、デコードURIは使わないの? ※自作が好きなんで・・・

/* * 2.UTF-8コード と 変換処理の構想 */

検索キーワード忘れましたが、 下記のようなコードの対応表を発見しました http://www.asahi-net.or.jp/~CI5M-NMR/w3/rfc2279.txt より UCS-4 range (hex.) UTF-8 octet sequence (binary) 0000 0000-0000 007F 0xxxxxxx 0000 0080-0000 07FF 110xxxxx 10xxxxxx 0000 0800-0000 FFFF 1110xxxx 10xxxxxx 10xxxxxx 0001 0000-001F FFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx 0020 0000-03FF FFFF 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 0400 0000-7FFF FFFF 1111110x 10xxxxxx ... 10xxxxxx と、変換表(規則)が書いてあった。 ※binaryの単語で引っかかったと思う。 2バイト文字(漢字)は、 1110xxxx 10xxxxxx 10xxxxxx と、なります。 これを、xxの部分をまとめてると、UNIコードになるので、 それをCHRW関数でSJISに戻してます。 http://www.google.co.jp/search?q=%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB がファイルを指定してます。 %E3%83%95 フ %E3%82%A1 ァ %E3%82%A4 イ %E3%83%AB ル とUTF-8でコード付けされてます。 ファイルの[フ]がE3 83 95かぁこれを2進数に直すと。 E 3 8 3 9 5 1110 0011 1000 0011 1001 0101 となります。 ここから、 0000 0800-0000 FFFF 1110xxxx 10xxxxxx 10xxxxxx の規則でxxxxの実データを取り出すと(1110 10 10は固定のコードなので) E 3 8 3 9 5 1110 0011 1000 0011 1001 0101 xxxx xx xxxx xx xxxx から xの部分を取り出すと、 0011 00 0011 01 0101 となり、わかりやすく、 0011 0000 1101 0101 として16進に直すと 30D5となるが、これはUNICODEらしい。 これをシフトJISに変換すれば、 UTF-8のデータを取り出せそうです。

/* * 3.ログDBからUTF-8コードを変換してみた(サンプル作成) */

http://www.ken3.org/cgi-bin/cnt/log100.asp?MODE=ETC で、通販ページのログを取ってます。 このデータを変換して、検索キーワードを表示させてみたいと思います。 テストで上に元のgoogleの検索リンク、下に変換結果を作成しました http://www.ken3.org/cgi-bin/test/test099-1.asp でテスト可能です。 ソースとデータを見て確認してください。 <%@LANGUAGE=VBScript%> <html> <head> <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 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>" %> </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
%>

/* * 4.終わりの挨拶 </HTML> */

今回は、%付のUTF-8コードを戻してみました。 これで、ログで収集したGoogleからの来場者が使用したキーワードがわかりそうです。 ほかのコードも戻して、ログキーワード解析につなげたいですね。 無駄な部分多いですが、変換処理の一つの案として、受け取ってください。 何かの参考となれば幸いです。 ASP、VBScript勉強中の三流プログラマーのKen3でした。
No.99を読んだ満足度(評価)は?
5満足(参考になった)
4まぁまぁ(一部参考になった)
3普通(どちらとも言えない)
2なんかなぁ(期待と違った)
1不満(読んで損した気分)
作者に感想・質問を送る(気軽に質問・感想書いてください)
あなたのお名前(ニックネーム) さん

作者からの返信は、 不用 掲示板 E-mail で受信したい
*質問・感想はメルマガで紹介する場合があります

三流君のHP主な飛び先

分類別ガイド

[アクセスランキング] [サイトマップ] [リンク先・相互リンク先など]
ASPで遊ぶ、失敗する 掲示板 バックナンバー メルマガ登録と解除
VBAで楽しくプログラミング 掲示板 バックナンバー メルマガ登録と解除
コンビニのオモテとウラ話 掲示板 バックナンバー メルマガ登録と解除
三流プログラマー 業務の愚痴 掲示板 バックナンバー メルマガ登録と解除

Ken3の日記(weblog) -- [プログラマー業務の愚痴] [VBA系の話題] [ASP系の話題] [コンビニ系ネタ] [その他]

種類別のサービス紹介ページ

[イーバンク銀行(eBANK)の口座開設] [ジャパンネットバンク(JNB)の口座開設] [ネットで小遣い稼ぎ(笑)] [在宅プログラマー/SOHO] [プログラマー転職/派遣/就職] [バナー広告アフィリエイトで稼ぐ実態]

種類別の商品 通信販売ページ

[自作PCパーツ] [ゲームソフトの通信販売] [CD/DVD/ビデオ] [花・フラワー ] [ダイエット・健康食品・サプリメントの通信販売] [美容・化粧品の通信販売] [ブランド・ジュエリー・香水の通信販売] [グルメ・おいしい食品の通信販売] [日本酒・焼酎の通信販売] [ワインの通信販売] [チーズの通信販売] [デザート・お菓子の通信販売] [ペット関係]

ネットワーク関係


ネットワーク技術が基礎から身につく 日経NETWORK
最適ソリューションを実現するための実務専門誌「日経システム構築」
Web制作・Webクリエイター - All About [Webプロデュース]
サンプル・ライブラリ・素材 - All About [JavaScript]
All About [ビジネスへのネット活用]
All About [ソフトウエアエンジニア]