JIS を 使った ソースコードを紹介する表示色の説明:ASP VBScriptは <% 〜 %> キーワードはJIS です。
<%@LANGUAGE=VBScript%>
<html>
<head><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=x-sjis">
<title>SJISからJISコードに変換、文字コード関係で遊ぶ</title>
</head>
<body>
<h2>SJISからJISコードに変換、文字コード関係で遊ぶ</h2>
<br>
自作したSJIS--JIS変換ルーチンを呼んでます。<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) & "] "
Response.Write "をAscで変換すると" & Asc(strWORK)
strCODE = Hex(Asc(strWORK))
If Len(strCODE) <= 2 Then '半角か?
Response.Write " さらにHexで16進数にすると" & strCODE
Else
Response.Write " さらにHexで16進(SJIS)は" & strCODE
Response.Write " JISコードは" & SJIStoJIS(strCODE)
End If
Response.Write "<BR>" & vbCRLF
Next
End If
%>
<HR>
<FORM ACTION="test061-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コードの文字列を受け取り、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
%>
|
|