OutlookExpressの受信メールをエクスプローラにドロップすると作成される拡張子がemlのファイルをVB上で読み込むアプリを作成しようとしています。
メールヘッダー部の
Subject: =?iso-2022-jp?B?SFRNTBskQiVhITwlayU1JXMlVyVrISFFOklVJVUlISUkJWskSiQ3GyhC?=
等のbase64&JISコード部分はBASP21で変換するので問題ないのですが、
本文を日本語化できずに悩んでおります。
本文部分を
「Content-Type: text/plain;
charset="iso-2022-jp"
Content-Transfer-Encoding: 7bit」で始まり、
「------=_NextPart_」で終わる文字列と考えれば良いことは
分かっているのですが、
その間の文字列をVB上で日本語表示するにはどうすれば良いのでしょうか?
JISコードの文字列をUnicodeで表示しているので文字化けするのだとは
思うのですが。
最終的にやりたいことは、VB上への表示ではなくMySQLのDBへの書き込みです。ですが、その前段階としてVB上での日本語表示ができれば前進するのではないかと思っております。
皆様のお知恵をお貸し下されば幸いです。
よろしくお願いします。
VB.NET なら、System.Text.Encoding で、.GetEncoding("iso-2022-jp")。
VB6 なら、ADODB.Stream で、.Charset = "iso-2022-jp" 。
……を使ってデコードすれば、通常の文字列として扱えるようになるかと。
ご回答ありがとうございます。
魔界の仮面弁士さんの過去の回答を参考にして、
以下のような形で一行ずつデコードできるかと
思ったのですが、ダメでした。
iso-2022-jpの文字列を読み込み、Shift_JISに変換する必要が
あるのかと思い、書いてみたのですがまるで検討違いだったようです。
Open File1.Path & "\" & File1.List(i - 1) For Input As #Fn
Do Until EOF(Fn)
Line Input #Fn, linetext
msgbox Conv_Text(linetext)
Loop
Close #Fn
Function Conv_Text(str)
'JISコードのストリームを作成
Set Stm = New ADODB.Stream
Stm.Open
Stm.Type = adTypeText
Stm.Charset = "iso-2022-jp" 'あるいは"Shift_JIS"や"EUC-JP"とか
Stm.WriteText str
'JISコードのバイナリとして取得
Stm.Position = 0
Stm.Type = adTypeBinary
B = Stm.Read()
Stm.Close
Set Stm = Nothing
'JISコードのストリームを作成
Set Stm = New ADODB.Stream
Stm.Open
Stm.Type = adTypeBinary
Stm.Write B
Stm.Position = 0
Stm.Type = adTypeText
Stm.Charset = "Shift_JIS" 'あるいは"Shift_JIS"や"EUC-JP"とか
Conv_Text = Stm.ReadText()
end function
が、ファイルからの読み込み、書き出しもできるとの
書き込み、今回の回答から以下のように書いてみたら
あっさり出来てしまいました。ありがとうございました。
Dim objStream
Set objStream = CreateObject("ADODB.Stream")
objStream.Open
objStream.Charset = "iso-2022-jp"
objStream.LoadFromFile ファイルパス
デコード後文字列 = objStream.ReadText()
objStream.Close
まだまだ試せることが残っている段階で質問してしまったことを
反省しております。
ただ、一行ずつデコードできないことについては、これはこれで
ぜひ解決したい問題でもあります。
ひとまず解決ではありますが、この件についてもお知恵を拝借できれば
幸いです。
よろしくお願いします。
> 一行ずつデコードできないことについては
一行ずつ読み取る機能もありますよ、ADODB.Stream には。
ヘルプで確認してみてください。
ヘルプで探してみたいと思います。
魔界の仮面弁士さん、どうもありがとうございました。
当初の目的は達成できましたので
解決とさせて頂きます。
ツイート | ![]() |