VB6でBASE64エンコードをUNCODE出力する方法はありますでしょうか


マナカ  2005-06-05 07:31:32  No: 90245

はじめましてマナカと申します。
今回初めて書き込みさせていただきます。
日ごろからこちらの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

どなたかお詳しい方がおられましたらお教え頂きたいのですが。
どうぞ宜しくお願い致します。
マナカ


KURAGE  URL  2005-06-05 07:54:39  No: 90246

http://helloweb.ddo.jp/BBS/Bbs.htmのVB6(SP5)] Base64暗号化.LZH
を参考にしてください。


マナカ  2005-06-05 09:56:03  No: 90247

やはり文字化けしていまします。

教えて頂いたコードを早速試させていただきましたところ

cn:: 6ZW36LC35bed      *UTF-8/BASE64Encode文字列

6ZW36LC35bed

長谷川

にするため、教えて頂いたfn_StrConvFromBase64を使用し
ましたところ、

髟キ隹キ蟾 

と文字化けしてしまいます。
----------------------------------------------
もともとの文字が
kreSSpDs    *ShiftJis/BASE64Encode文字列
の場合は
長谷川と正しく文字化けせずに表示されます。

----------------------------------------------
使い方は、
s=fn_StrConvFromBase64("6ZW36LC35bed", False, True)
であっていますでしょうか?

私の使い方が悪いのだと思うので、念のため確認させてください。

お早いお返事大変ありがとうございます。
その他なにか情報がありましたら引き続き宜しくお願い致します。
マナカ


魔界の仮面弁士  2005-06-05 22:35:24  No: 90248

>   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


魔界の仮面弁士  2005-06-05 22:42:46  No: 90249

# 書き忘れ。

上記のコードを実行する場合には、参照設定で
  Microsoft ActiveX Data Objects
の 2.5以上を選択しておいてください。

ところで。

> VB6でBASE64エンコードをUNCODE出力する方法はありますでしょうか

「UNCODE出力」という言葉の意味がわかりませんでした。
これは DECODE の意味でしょうか? それとも UNICODE の意味?


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加