[三流君] −−>
[ASPで遊ぶ、失敗する] −−>
[バックナンバー一覧]
−−> No.052 キャラクタコード、Asc関数を使用して文字コードで遊ぶ
キャラクタコード、Asc関数を使用して文字コードで遊ぶ
本文(発行内容)
<キャラクタコード、Asc関数を使用して文字コードで遊ぶ>
こんにちは、三流プログラマーのKen3です。
今回は、
Asc関数を使って、文字で遊んでみます。
拾い読みして、何かの参考となれば幸いです。
/*
* 1.Asc関数で文字コードの表示、蛇足で16進数表示
*/
あまり意識したこと無いのですが、
キャラクタコードを表示してみたいと思います。
いつもの適当な動作仕様は、
フォームで文字列を入力、Getで送信。
受け取ったデータをMid関数で一文字単位で取り出し、
Asc関数で文字コードを表示します、
ついでにHex関数で16進数の文字列にしてみます。
なんだか、よくわからん(笑)
さてと、仕様にあわせて作るか。
http://www.ken3.org/cgi-bin/test/test052-1.asp?DATA=012ABCxyz
で、テストできます。遊んでみてください。
<%@LANGUAGE=VBScript%>
<html>
<head>
<title>Asc関数でキャラクタコードの表示、Hex関数を使用して16進数で表示</title>
</head>
<body>
<h2>Asc関数でキャラクタコードの表示、Hex関数を使用して16進数で表示</h2>
<!-- Ken3 --><!-- #include file="info.inc" -->
<%
CHK_DATA = Request.QueryString("DATA") 'パラメータの代入
'長さをチェックする
If Len(CHK_DATA) <> 0 Then '文字が入っていたら
Response.Write "受け取ったデータは["
Response.Write Server.HTMLEncode(CHK_DATA) & "]です<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)
Response.Write " さらにHexで16進数にすると" & Hex(Asc(strWORK))
Response.Write "<BR>" & vbCRLF
Next
End If
%>
<HR>
<FORM ACTION="test052-1.asp" METHOD="GET">
調査したい文字列を入力してください。<br>
<INPUT TYPE="text" SIZE="30" NAME="DATA" VALUE="<%=CHK_DATA%>">
<INPUT TYPE="submit" VALUE="コード調査開始"><br>
↑いろいろと遊んでみてください↑
</FORM>
<br>
</body>
</html>
ポイントを整理すると
~~~~~~~~~~~~~~~~~~~~
'文字数分ループして、コードを表示
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)
Response.Write " さらにHexで16進数にすると" & Hex(Asc(strWORK))
Response.Write "<BR>" & vbCRLF
Next
のループ部分です。
Len関数で文字数が求められるので、
For文で1から文字数までカウンタnを使ってます。
Mid関数を使用して、n番目の文字を取り出します。
あとは、関数の連発で、
Server.HTMLEncode(strWORK) <>%”などの表示不可文字をエンコードして表示
Asc(strWORK) 取り出した文字の文字コードを表示
Hex(Asc(strWORK)) 文字コードをさらに16進数文字列に変換して表示
http://www.ken3.org/cgi-bin/test/test052-1.asp?DATA=012ABCxyz
と実行すると
受け取ったデータは[012ABCxyz]です
1文字目は[0] をAscで変換すると48 さらにHexで16進数にすると30
2文字目は[1] をAscで変換すると49 さらにHexで16進数にすると31
3文字目は[2] をAscで変換すると50 さらにHexで16進数にすると32
4文字目は[A] をAscで変換すると65 さらにHexで16進数にすると41
5文字目は[B] をAscで変換すると66 さらにHexで16進数にすると42
6文字目は[C] をAscで変換すると67 さらにHexで16進数にすると43
7文字目は[x] をAscで変換すると120 さらにHexで16進数にすると78
8文字目は[y] をAscで変換すると121 さらにHexで16進数にすると79
9文字目は[z] をAscで変換すると122 さらにHexで16進数にすると7A
と変換されて表示されます。
いろいろと文字を入れて、遊んでみてください。
/*
* 2.漢字は?どんな感じ(寒いオヤジギャグだった、、、)
*/
日本人が気になるのは、漢字だよね。
漢字を入力するとどんな感じになるか?と寒いオヤジギャグをかましつつ、
ASP楽しくをテストしました。
http://www.ken3.org/cgi-bin/test/test052-1.asp?DATA=ASP%8Ay%82%B5%82%AD
受け取ったデータは[ASP楽しく]です
1文字目は[A] をAscで変換すると65 さらにHexで16進数にすると41
2文字目は[S] をAscで変換すると83 さらにHexで16進数にすると53
3文字目は[P] をAscで変換すると80 さらにHexで16進数にすると50
4文字目は[楽] をAscで変換すると-30087 さらにHexで16進数にすると8A79
5文字目は[し] をAscで変換すると-32075 さらにHexで16進数にすると82B5
6文字目は[く] をAscで変換すると-32083 さらにHexで16進数にすると82AD
こんな感じで結果が表示されました。
LenやMidは漢字混じりでもOKなんだぁ、
漢字のコードは2バイトXXXXなんですね。
/*
* 3.あまり必要ないけど、バイト数を数える関数を作成してみる
*/
私は、今のところ必要ないんだけど、おまけで、
バイト数を数える関数を作成してみるか。
関数の仕様は、文字列を受け取って、リターン値でバイト数を返すか。
Function Byte_Count(strMOJI)
bcnt = 0
'文字数分ループして、コードを表示
For n = 1 To Len(strMOJI)
nCODE = Asc(Mid(strMOJI, n, 1)) 'n番目の文字コードを求める
If nCODE >= 0 And nCODE <= 255 Then 'コードが1バイト文字内か?
bcnt = bcnt + 1
Else
bcnt = bcnt + 2
End If
Next
'リターン値をセットする
Byte_Count = bcnt
End Function |
http://www.ken3.org/cgi-bin/test/test052-2.asp?DATA=ASP%8Ay%82%B5%82%AD
でテストすると、
受け取ったデータは[ASP楽しく]です
バイト数は、9Byteです
と半角3バイト+全角6バイト(3文字)の計算が無事できました。
/*
* 4.終わりの挨拶 </HTML>
*/
今回は、
Asc関数で文字コードの表示、
Hex関数で16進数に変換、
試しに半角、全角を判断してバイト数を求める関数を作成しました。
素朴な疑問やリクエストなどがあったら、気軽に、
メール、掲示板に書き込んでくださいね。
掲示板 : http://www.ken3.org/asp/bbs-asp.html
ASP、VBScript勉強中の三流プログラマーのKen3でした。
フィードバック
ASP系の→[掲示板]←を覗く、質問を書き込む
評価・感想
三流君の主なリンク先
[アクセスランキング]
[サイトマップ]
[リンク先・相互リンク先など]
Ken3の日記(weblog) --
[広告・副収入系]
[プログラマー業務の愚痴]
[VBA系の話題]
[ASP系の話題]
[コンビニ系ネタ]
[その他]
その他 宣伝広告