EUCコードをSJISコードに変換するには?


jiveman  2000-08-25 23:21:42  No: 73941  IP: [192.*.*.*]

EUCのコードをSJISにして一覧表示を行いたいのですが、EUCのまま
ですと日本語は化けますよね!
対処よろしくお願いします。

編集    削除
MADIA  URL  2000-08-30 06:55:30  No: 73942  IP: [192.*.*.*]

コードを変換するしかないですね。
VBではやった事はないですが、コードを16進にして計算するしかないと思います。

編集    削除
HIRO  2000-09-04 02:18:25  No: 73943  IP: [192.*.*.*]

私も悩みましたがVBでも実現できますので、参考にしていただければ。
  多いパターンではないかと思いますがUNIX SYBASEからデータを
読込んでJISに変換して処理する部分を簡単に書いてみました。
  
  Dim bMoji()       As Byte               '* Byte配列
  Dim sMoji         As String * 256       '* 変換後文字列データ

  SQL = "select convert(varbinary(100),A_Field) from X_Tbl" 
  <<< バイナリ変換状態の結果セットを得る必要がある >>> 
  Set rs = dbcon.Openresultset(SQL)
  bMoji = rs(0)                                
  Call EUCChg(bMoji, sMoji)

  Public Function EUCChg(bEUCByte() As Byte, sSJIS As String)
    Dim bMoji(256) As Byte
    Dim sReturn As String * 256
    Dim Upper As Long
    Dim i As Integer
    Upper = UBound(bEUCByte)   '* 配列に格納された最終データ位置を押さえる
    For i = 0 To 256           '* Byte配列Workの初期化
         bMoji(i) = 0
    Next i
   For i = 0 To Upper          '* 256のByte配列に格納
        bMoji(i) = bEUCByte(i)
   Next i
   euc2str bMoji, sReturn      '* Byte配列を渡す
   sSJIS = sReturn
  End Function

  Public Sub euc2str(ByRef src() As Byte, ByRef str As String)
  Dim ix As Integer
  Dim ox As Integer
  Dim bb As Byte
  Dim b1 As Byte
  Dim b2 As Byte
  Dim rtc As Long
   ox = 0 : str = "" : ix = 0 
   Do  bb = src(ix)
       ix = ix + 1
       If bb = 0 Then
          Exit Do
       ElseIf bb And &H80 Then
           b1 = bb And &H7F
           bb = src(ix)
           ix = ix + 1
           b2 = bb And &H7F
           rtc = jis2sj(b1 * 256 + b2)
           str = str & Chr(rtc)
           ox = ox + 2
       Else
           str = str & Chr(bb)
           ox = ox + 1
       End If
   Loop
  End Sub

編集    削除