|
|||||
Quoted-Printableエンコード、Quoted-Printableデコードするサンプル(VB.NET)です。 Quoted-Printableでエンコードされたメールを解読する時に使います。 Quoted-Printableとは主に電子メールで使用するエンコード方法で、 7ビットの印字可能な文字でデータを転送するために使用されます。 イコール(=)の後に2桁の16進数(HEX)を付けたフォーマットで文字コードを符号化します。 例えば"あいうえお"は"=E3=81=82=E3=81=84=E3=81=86=E3=81=88=E3=81=8A"に変換されます。 "=XX=XX=XX"形式で暗号化されたメールが届いた時には、 Quoted-Printableデコードすると読めるようになります。 C#.NETのサンプルはこちらです。 Quoted-Printableをエンコード/デコードするサンプル(C#.NET) Quoted-Printable関連のツールはこちらです。 WEBエンコード/デコードツール ★フォームモジュール(Form1.vb) Public Class Form1 ' QuotedPrintableエンコード Private Sub Button1_Click( _ ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click ' 変換前の文字列用 Dim istr As String = "あいうえお" ' 変換後の文字列用 Dim ostr As String = "" For i As Integer = 0 To istr.Length - 1 If istr.Substring(i, 1) = "=" Then ' イコール"="は"=3D"に変換 ostr = ostr & "=3D" ElseIf Asc(istr.Substring(i, 1)) = &H9 Then ' タブは変換しない ostr = ostr & istr.Substring(i, 1) ElseIf Asc(istr.Substring(i, 1)) = &HA Then ' 改行は変換しない ostr = ostr & istr.Substring(i, 1) ElseIf Asc(istr.Substring(i, 1)) = &HD Then ' 改行は変換しない ostr = ostr & istr.Substring(i, 1) ElseIf Asc(istr.Substring(i, 1)) = &H20 Then ' スペースは変換しない ostr = ostr & istr.Substring(i, 1) ElseIf Asc(istr.Substring(i, 1)) >= &H21 And _ Asc(istr.Substring(i, 1)) <= &H7E Then ' 21(16進)から7E(16進)は変換しない ostr = ostr & istr.Substring(i, 1) Else ' System.Webを参照設定する必要があります ' QuotedPrintableはUTF8のUrlEncodeと似ているので代用!! Dim tstr As String = istr.Substring(i, 1) tstr = System.Web.HttpUtility.UrlEncode(tstr, _ System.Text.Encoding.GetEncoding("UTF-8")) ' UrlEncodeの変換後文字列のパーセント(%)をイコール(=)に置換 tstr = tstr.Replace("%", "=").ToUpper ostr = ostr & tstr End If Next ' 変換後の文字列を表示 System.Diagnostics.Trace.WriteLine(ostr) End Sub ' QuotedPrintableデコード Private Sub Button2_Click( _ ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click ' 変換前の文字列用 Dim istr As String = "=E3=81=82=E3=81=84=E3=81=86=E3=81=88=E3=81=8A" ' 変換後の文字列用 Dim ostr As String = istr ' 行末のイコール"="は削除 ostr = ostr.Replace("=" & vbCrLf, "") ostr = ostr.Replace("=" & vbCr, "") ostr = ostr.Replace("=" & vbLf, "") Dim p0 As Integer = 0 Dim p1 As Integer = 0 Do While (p0 <= ostr.Length - 1) ' "="を見つけて"%"に変換 p1 = ostr.IndexOf("=", p0) If p1 >= 0 Then If p1 + 3 <= ostr.Length Then Try ' "="を見つけて"%"に変換する前に、 ' 次の2文字が16進数かどうかチェックする Dim dat As Byte dat = Convert.ToInt32(ostr.Substring(p1 + 1, 2), 16) ' "="を"%"に変換 Dim tstr As String = "" tstr = tstr & ostr.Substring(0, p1) tstr = tstr & ostr.Substring(p1, 3).Replace("=", "%") tstr = tstr & ostr.Substring(p1 + 3) ostr = tstr Catch ex As Exception End Try End If p0 = p1 + 1 Else Exit Do End If Loop ' System.Webを参照設定する必要があります ' QuotedPrintableはUTF8のUrlDecodeと似ているので代用!! ostr = System.Web.HttpUtility.UrlDecode(ostr, _ System.Text.Encoding.GetEncoding("UTF-8")) ' 変換後の文字列を表示 System.Diagnostics.Trace.WriteLine(ostr) End Sub End Class |