EUCのコードをSJISにして一覧表示を行いたいのですが、EUCのまま
ですと日本語は化けますよね!
対処よろしくお願いします。
コードを変換するしかないですね。
VBではやった事はないですが、コードを16進にして計算するしかないと思います。
私も悩みましたが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
ツイート | ![]() |