はじめましてマナカと申します。
今回初めて書き込みさせていただきます。
日ごろからこちらのHPを見て参考にさせていただいております。
さて、早速で恐縮ですが、VB6でBASE64エンコードをUNCODE出力する方法はありますでしょうか。
もう少し具体的に申し上げますと
a="6ZW36LC35bed"
を
長谷川
と変換する方法はありますでしょうか。
何人かの友人に聞いたところBASE64.dllなどフリーのDLLやC++を使わずピュアナVB6のコードでこれを行うのは無理と言われ大変こまっております。
いろいろなHPも探しているところですが、BASE64 のデコードができる以下のHPを見つけることができましたが、残念がならEUCとShiftJISの出力しか出来ませんでした。
http://www.geocities.co.jp/SiliconValley/4334/unibon/asp/base64.html
どなたかお詳しい方がおられましたらお教え頂きたいのですが。
どうぞ宜しくお願い致します。
マナカ
http://helloweb.ddo.jp/BBS/Bbs.htmのVB6(SP5)] Base64暗号化.LZH
を参考にしてください。
やはり文字化けしていまします。
教えて頂いたコードを早速試させていただきましたところ
cn:: 6ZW36LC35bed *UTF-8/BASE64Encode文字列
の
6ZW36LC35bed
を
長谷川
にするため、教えて頂いたfn_StrConvFromBase64を使用し
ましたところ、
髟キ隹キ蟾
と文字化けしてしまいます。
----------------------------------------------
もともとの文字が
kreSSpDs *ShiftJis/BASE64Encode文字列
の場合は
長谷川と正しく文字化けせずに表示されます。
----------------------------------------------
使い方は、
s=fn_StrConvFromBase64("6ZW36LC35bed", False, True)
であっていますでしょうか?
私の使い方が悪いのだと思うので、念のため確認させてください。
お早いお返事大変ありがとうございます。
その他なにか情報がありましたら引き続き宜しくお願い致します。
マナカ
> a="6ZW36LC35bed"
> を
> 長谷川
> と変換する方法はありますでしょうか。
『長谷川』という文字列を、Shift_JIS, UTF-16, EUC-JP, UTF-8 の
各文字コードで符号化した場合、それぞれ16進数表現で
長 92B7 9577 C4B9 E995B7
谷 924A 8C37 C3AB E8B0B7
川 90EC 5DDD C0EE E5B79D
となりますね。
(最初の質問には書かれていませんでしたが、
元データの文字コードは UTF-8 なのでしょうか?)
で。『6ZW36LC35bed』という12文字を、BASE64の変換表に照らし合わせると、
10進数表現: 58,25,22,55,58,11, 2,55,57,27,30,29
16進数表現: 3A,19,16,37,3A,0B,02,37,39,1B,1E,1D
というデータを表している事がわかります。
# VB的に変換するなら、以下の公式で。
# 「N = InStr(1, "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/", 一文字) - 1」
その 58,25,22,55,58,11,2,55,57,27,30,29 を 「6bit」で 2進数化すると、
111010,011001,010110,110111,111010,001011,000010,110111,111001,011011,011110,011101
それを「8bit」単位に区切りなおして
11101001,10010101,10110111,11101000,10110000,10110111,11100101,10110111,10011101
すなわち、
10進数表現: 233,149,183,232,176,183,229,183,157
16進数表現: E9, 95, B7, E8, B0, B7, E5, B7, 9D
という 9バイトのデータが、BASE64変換される前の元データとなりますね。
でもって、「E9, 95, B7, E8, B0, B7, E5, B7, 9D」を
「UTF-8 のバイナリ」とみなして 文字列化したいなら、こんな感じで。
Dim Stm As ADODB.Stream
Dim Buf() As Byte
Dim Result As String
ReDim Buf(8)
Buf(0) = &HE9
Buf(1) = &H95
Buf(2) = &HB7
Buf(3) = &HE8
Buf(4) = &HB0
Buf(5) = &HB7
Buf(6) = &HE5
Buf(7) = &HB7
Buf(8) = &H9D
'バイナリストリームを生成
Set Stm = New ADODB.Stream
Stm.Type = adTypeBinary
Stm.Open
Stm.Write Buf 'Byte配列を書き込み
'カーソル位置を先頭に戻して、UTF-8形式のテキストストリームに変更
Stm.Position = 0
Stm.Type = adTypeText
Stm.Charset = "UTF-8"
'UCS-2の文字列として取得
Result = Stm.ReadText(adReadAll)
'後始末 & 結果の確認
Stm.Close
Set Stm = Nothing
MsgBox Result, vbInformation
# 書き忘れ。
上記のコードを実行する場合には、参照設定で
Microsoft ActiveX Data Objects
の 2.5以上を選択しておいてください。
ところで。
> VB6でBASE64エンコードをUNCODE出力する方法はありますでしょうか
「UNCODE出力」という言葉の意味がわかりませんでした。
これは DECODE の意味でしょうか? それとも UNICODE の意味?
ツイート | ![]() |