SJISからEUCコードに変換、文字コード関係で遊ぶ

と言っても、JISのコードの頭を0x80でビットを立ててるだけなのですが。
Classic ASPテストページです。
情報が古いので参考程度に読んだりテストしてみてください。
共有サーバーなので、処理に時間がかかるとタイムアウトやアクセスが集中すると落ちている時がありますがご勘弁を・・・

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

分類: [Form関係] /DB系ADOを使い( [Mdb接続] [CSV接続] [Excel接続]) /[ASPでTextFileを操作] /[VBScript関数ほか]

自作したSJIS--EUC変換ルーチンを呼んでます。
※詳細は、ソースと詳細解説のページを見てください。

受け取ったデータは[ニンテンドー DS]です
バイト数は、15Byteです
1文字目は[ニ] さらにHexで16進(SJIS)は836A JISは254B EUCはA5CB
2文字目は[ン] さらにHexで16進(SJIS)は8393 JISは2573 EUCはA5F3
3文字目は[テ] さらにHexで16進(SJIS)は8365 JISは2546 EUCはA5C6
4文字目は[ン] さらにHexで16進(SJIS)は8393 JISは2573 EUCはA5F3
5文字目は[ド] さらにHexで16進(SJIS)は8368 JISは2549 EUCはA5C9
6文字目は[ー] さらにHexで16進(SJIS)は815B JISは213C EUCはA1BC
7文字目は[ ] 半角はそのまま16進数にする 20
8文字目は[D] 半角はそのまま16進数にする 44
9文字目は[S] 半角はそのまま16進数にする 53
ニンテンドー DS← ヤフオクに飛ぶ
↑キーワードリンク リンクのコードは↓
http://search.auctions.yahoo.co.jp/jp/search/auc?p=%A5%CB%A5%F3%A5%C6%A5%F3%A5%C9%A1%BC+DS&auccat=0&alocale=0jp&acc=jp

調査したい文字列を入力してください。

↑いろいろと遊んでみてください↑




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

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

EUC を 使った ソースコードを紹介する

表示色の説明:ASP VBScriptは <% 〜 %>
キーワードはEUC です。 <%@LANGUAGE=VBScript%> <html> <head><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=x-sjis"> <title>SJISからEUCに変換、文字コード関係で遊ぶ</title> </head> <body> <h2>SJISからEUCコードに変換、文字コード関係で遊ぶ</h2> と言っても、JISのコードの頭を0x80でビットを立ててるだけなのですが。<br> <br> 自作したSJIS--EUC変換ルーチンを呼んでます。<br> ※詳細は、ソースと詳細解説のページを見てください。<br> <hr> <% CHK_DATA = Request.QueryString("DATA") 'パラメータの代入 '長さをチェックする If Len(CHK_DATA) <> 0 Then '文字が入っていたら Response.Write "受け取ったデータは[" Response.Write Server.HTMLEncode(CHK_DATA) & "]です<br>" '関数を呼んで、バイト数を表示する Response.Write "バイト数は、" & Byte_Count(CHK_DATA) & "Byteです<br>" '文字数分ループして、コードを表示 For n = 1 To Len(CHK_DATA) Response.Write n & "文字目は" strWORK = Mid(CHK_DATA, n, 1) 'n番目の文字を取り出す Response.Write "[" & Server.HTMLEncode(strWORK) & "] " strCODE = Hex(Asc(strWORK)) If Len(strCODE) <= 2 Then '半角か? Response.Write " 半角はそのまま16進数にする " & strCODE Else Response.Write " さらにHexで16進(SJIS)は" & strCODE Response.Write " JISは" & SJIStoJIS(strCODE) Response.Write " EUC" & SJIStoEUC(strCODE) End If Response.Write "<BR>" & vbCRLF Next 'ヤフーオークションのリンクを作ってみる。 p="" 'パラメータ文字列の初期化。 For n = 1 To Len(CHK_DATA) strWORK = Mid(CHK_DATA, n, 1) 'n番目の文字を取り出す strCODE = Hex(Asc(strWORK)) If Len(strCODE) <= 2 Then '半角か? If strWORK = " " Then '半角スペースは+に変換する p = p & "+" 'ほかにも特殊文字があるんだけど手抜き Else p = p & strWORK '半角はそのまま追加する ヤフオクの場合 End If Else sEUC = SJIStoEUC(strCODE) 'EUCコードに変換する。 '%付きの文字列 %XX%XX を作成する。 p = p & "%" & Mid(sEUC,1,2) & "%" & Mid(sEUC,3,2) End If Next ' A リンクを表示する。 sURL = "http://search.auctions.yahoo.co.jp/jp/search/auc?" sURL = sURL & "p=" & p '変数pを追加 sURL = sURL & "&auccat=0&alocale=0jp&acc=jp" '追加パラメータ Response.Write "<a Href='" & sURL & "' target='_blank'>" Response.Write Server.HTMLEncode(CHK_DATA) & "</a>← ヤフオクに飛ぶ<br>" Response.Write "↑キーワードリンク リンクのコードは↓<br>" Response.Write Server.HTMLEncode(sURL) & "<br>" End If %> <HR> <FORM ACTION="test107-1.asp" METHOD="GET"> 調査したい文字列を入力してください。<br> <INPUT TYPE="text" SIZE="30" NAME="DATA" VALUE="<%=CHK_DATA%>"> <INPUT TYPE="submit" VALUE="コード調査開始"><br> ↑いろいろと遊んでみてください↑ </FORM> <br> </body> </html> <% 'SJISコードの文字列を受け取り、EUCコードの文字列を返す Function SJIStoEUC(strSJISCODE) Dim hi Dim lo 'シフトJISコードの上位バイトを hi、下位バイトを lo とします。 hi = Clng("&h" & Mid(strSJISCODE, 1, 2)) lo = Clng("&h" & Mid(strSJISCODE, 3, 2)) If hi <= &H9F Then hi = hi - &H71 'hi が 0x9f 以下の場合、 hi から 0x71 減じます。 Else hi = hi - &HB1 'そうでない場合、 hi から 0xB1 減じます。 End If 'hi に 2 を乗じて、さらに 1 を加えます。 hi = hi * 2 + 1 'lo が 0x7F より大きい場合、 lo から 1 減じます。 If lo > &H7F Then lo = lo - 1 'lo が 0x9E 以上の場合、lo から 0x7D 減じて、hi に 1 加えます。 If lo >= &H9E Then lo = lo - &H7D hi = hi + 1 Else 'そうでない場合、 lo から 0x1F 減じます。 lo = lo - &H1F End If 'JISの hi と lo ができたので、0x80 を or して 最上位のビットを立てます。 hi = hi or &h80 lo = lo or &h80 '結果を返します SJIStoEUC = Right("0" & Hex(hi), 2) & Right("0" & Hex(lo), 2) End Function 'SJISコードの文字列を受け取り、JISコードの文字列を返す Function SJIStoJIS(strSJISCODE) Dim hi Dim lo 'シフトJISコードの上位バイトを hi、下位バイトを lo とします。 hi = Clng("&h" & Mid(strSJISCODE, 1, 2)) lo = Clng("&h" & Mid(strSJISCODE, 3, 2)) If hi <= &H9F Then hi = hi - &H71 'hi が 0x9f 以下の場合、 hi から 0x71 減じます。 Else hi = hi - &HB1 'そうでない場合、 hi から 0xB1 減じます。 End If 'hi に 2 を乗じて、さらに 1 を加えます。 hi = hi * 2 + 1 'lo が 0x7F より大きい場合、 lo から 1 減じます。 If lo > &H7F Then lo = lo - 1 'lo が 0x9E 以上の場合、lo から 0x7D 減じて、hi に 1 加えます。 If lo >= &H9E Then lo = lo - &H7D hi = hi + 1 Else 'そうでない場合、 lo から 0x1F 減じます。 lo = lo - &H1F End If '結果を返します SJIStoJIS = Right("0" & Hex(hi), 2) & Right("0" & Hex(lo), 2) End Function '文字列を受け取り、バイト数を返す Function Byte_Count(strMOJI) bcnt = 0 '文字数分ループして、コードを表示 For n = 1 To Len(strMOJI) nCODE = Asc(Mid(strMOJI, n, 1)) 'n番目の文字コードを求める If (nCODE And &HFF00) = 0 Then 'コードは1バイトか? *asp055 bcnt = bcnt + 1 Else bcnt = bcnt + 2 End If Next 'リターン値をセットする Byte_Count = bcnt End Function %>




Googleで関連項目を検索する

[キーワード:EUC] と Sub|Function で検索する。
↓で検索するとプログラムの例 Sub/Function でまとまったHP

Google

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

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

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

まぁ、基本はデータの受け取りかなぁ。
・[Form等を使用したデータのやり取り]・・・ASPと言っても、HTMLの入力フォームからデータを受け取ります。POSTやGETでやりとりを押さえますか。
次は、データの入出力 で ADOを使った(ADOで接続) と SQLの解説を少々
・[ADOでMdbファイルを使う]・・・MDBと接続して、簡単な追加・更新・削除を行った。
・[ADOでExcelと接続してみた]・・・.xlsと接続してSQLを使ってみた。
・[ADOでCSVと接続してみた]・・・.CSV テキストを読み出した。※更新・削除はできません
DBが使えるので、あまり使用しないけど、普通のテキストファイル処理
・[テキストファイル処理]・・・ファイルを開いて、書き込む。1行読み込みなどを軽く
VBScriptでFormat関数が無いなど、微妙にVBAと違うけど
[VBScript関数関係の説明]・・・少し、処理を書いてみた。
[その他処理サンプル]・・・あまり良いサンプル作れなかったけど。。。
何かの参考となれば幸いです。



その他:blogや広告↓
[日記的なblog]← あまり更新してないけど・・・
[永遠の下書き日記?]← 恥ずかしいのであまり載せてないけど・・・
[ひとりで掲示板?] ←一人で?掲示板?ぉぃぉぃ



[Topへ戻る] −−>[ASP系へ戻る] −−>[バックナンバーを見る]


現在時刻は、2018/07/16 21:35:40です。