DOBON.NET どぼん!のVB道掲示板(プログラム)過去ログ

メールのサブジェクトのデコード

●どうしたいか:
メーラーを作りたいのだがサブジェクトのデコード方法が
分からない。
=?ISO-2022-JP?B?GyRCJCIkMSReJDckRiQqJGEkRyRIJCYhKhsoSg==?=

●あなたが試した解決(対策)法:
http://dobon.net/vb/dotnet/string.html#base64

●あなたはどんな回答を望んでいるか:
ヒントをください。
>メーラーを作りたいのだがサブジェクトのデコード方法が
>分からない。
>=?ISO-2022-JP?B?GyRCJCIkMSReJDckRiQqJGEkRyRIJCYhKhsoSg==?=

ヒントというかほとんど答えになりますが、簡単な関数を書いてみましたので参考にしてみてください。ちゃんとしたものを作るにはRFC2047の知識が必要でしょう。

RFC2047
http://www.ietf.org/rfc/rfc2047.txt

Private Function DecodeMailSubject(ByVal strIn As String) As String
Dim s() As String = strIn.Split("?"c)
Dim b() As Byte
If s(2) = "B" Then
b = System.Convert.FromBase64String(s(3))
Else
'Base64形式のみ対応
Throw New Exception("未対応のエンコード形式です。")
End If
Return System.Text.Encoding.GetEncoding(s(1)).GetString(b)
End Function
どぼんさん、ご回答ありがとうございました。

> Dim s() As String = strIn.Split("?"c)
この.Split("?"c)
のcは何を示しているのですか?
試しに、strIn.Split("?")としてもうまくいきましたが...。
ms-help://MS.VSCC/MS.MSDNVS.1041/cpref/html/frlrfsystemstringclasssplittopic1.htm
(ヘルプのString.Split メソッドを参照しましたが、わかりませんでした。)

**
今回の質問で、回答のお知らせメールが来たのですが、

Private Function DecodeMailSubject(ByVal strIn As String) As String
Dim s() As String = strIn.Split(¥"?¥"c)
Dim b() As Byte
If s(2) = ¥"B¥" Then
(中略..)
のように表示されました。なぜか, " が ¥ となってました。
(¥は本来,半角でした)
>> Dim s() As String = strIn.Split("?"c)
>この.Split("?"c)
>のcは何を示しているのですか?
>試しに、strIn.Split("?")としてもうまくいきましたが...。
>ms-help://MS.VSCC/MS.MSDNVS.1041/cpref/html/frlrfsystemstringclasssplittopic1.htm
>(ヘルプのString.Split メソッドを参照しましたが、わかりませんでした。)

cはchar型であることを明示するために使います。これがないとString型となってしまうと思われます。これがなくてもうまく行ったというのは内部でStringからcharへ変換されているからではないでしょうか。

>**
>今回の質問で、回答のお知らせメールが来たのですが、
>
>Private Function DecodeMailSubject(ByVal strIn As String) As String
> Dim s() As String = strIn.Split(¥"?¥"c)
> Dim b() As Byte
> If s(2) = ¥"B¥" Then
>(中略..)
>のように表示されました。なぜか, " が ¥ となってました。
>(¥は本来,半角でした)

掲示板のバグでしょうか。私が開発したわけではないのでわかりませんが。

結局私の書いたコードはうまく動いたのでしょうか?そこが今ひとつ分からなかったので、不安です。
>>> Dim s() As String = strIn.Split("?"c)
>>この.Split("?"c)
>>のcは何を示しているのですか?
>>試しに、strIn.Split("?")としてもうまくいきましたが...。
(中略)
>cはchar型であることを明示するために使います。これがないとString型となってしまうと思われます。これがなくてもうまく行ったというのは内部でStringからcharへ変換されているからではないでしょうか。

なるほど、念のために使ったほうがいいみたいでね。

>> If s(2) = ¥"B¥" Then
>>(中略..)
>>のように表示されました。なぜか, " が ¥ となってました。
>>(¥は本来,半角でした)
>
>掲示板のバグでしょうか。私が開発したわけではないのでわかりませんが。
了解しました。

>結局私の書いたコードはうまく動いたのでしょうか?そこが今ひとつ分からなかったので、不安です。
うまく動きました。ありがとうございました。

DOBON.NET | プログラミング道 | プログラミング掲示板