<SJIS--JISのコード変換>
こんにちは、三流プログラマーのKen3です。 今回は、 シフトJISからJISコードへ、コード変換を行ってみます。 拾い読みして、何かの参考となれば幸いです。/* * 1.今回のキッカケ */
VBA系のメルマガ( http://www.ken3.org/vba/ ) で、 シフトJISからJISコードへ、コード変換を行ってみたので、 ASP(VBScript)でもやってみます。/* * 2.VBAの自作関数を移植する。 */
VBA系のメルマガ No.79 SJIS--JISコードの文字列を作成したい で、下記の変換関数を作成しました。 ※式、コードの意味などは、 http://www.ken3.org/backno/backno_vba16.html#79 を見てください。 'シフトJISコードの文字列を受け取り、JISコードを返す
| Function SJIStoJIS(strSJISCODE As String) As String
    Dim hi As Long
    Dim lo As Long
    'シフトJISコードの上位バイトを hi、下位バイトを lo とします。
    hi = Val("&h" & Mid(strSJISCODE, 1, 2))
    lo = Val("&h" & Mid(strSJISCODE, 3, 2))
    'hi が 0x9f 以下の場合、 hi から 0x71 減じます。
    'そうでない場合、 hi から 0xB1 減じます。
    hi = hi - IIf(hi <= &H9F, &H71, &HB1)
    
    '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 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 | 
ここまで、読んでいただきどうもです。目的の情報が見つかったか?少々心配しつつ、、、
感想や質問・要望・苦情など 三流君へメッセージを送る。

下記のフォームからメッセージを送ることができます。
[三流君(TOP ken3.org へ戻る)]
 / [ASPで遊ぶ、失敗する]
 / [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関数関係の説明]・・・少し、処理を書いてみた。
[その他処理サンプル]・・・あまり良いサンプル作れなかったけど。。。
何かの参考となれば幸いです。
[三流君(TOP ken3.org へ戻る)]
 / [ASPで遊ぶ、失敗する]
 / [ASP記事 バックナンバー目次]