Quoted-Printableでエンコード・デコード
Quoted-Printableは、MIMEに規定されたエンコード方法の1つです。
携帯電話から送られるHTMLメールでQuoted-Printableが使用されているようなので、同じように送信できるようVB2005で実装してみました。
Quoted-Printableのエンコード
Quoted-Printableは、「=」以外のASCII文字とスペース、タブ、改行はそのまま使用しその他の値は、8bitごとに「=」と16進数の文字に変換します。(大文字)
※符号化しない範囲:0x21~0x3C、0x3E~0x7E
「=」の場合、符号化された文字は、「=3D」となり「=」と16進数の文字列であらわされます。また、1行が76文字を超える場合、改行と区別するため行末に「=」を追加し行が継続していることがわかるように編集します。
Quoted-Printableのエンコードとデコード例
ここでの例は、文字数の制限は考慮していません。
Public Class QuotedPrintable
Public Function ToQuotedPrintableString(ByVal inArray() As Byte) As String
Dim strEncodedChar As String = ""
Dim stbBuff As New StringBuilder
For i As Integer = 0 To inArray.Length - 1
If inArray(i) < &H20 Or inArray(i) = &H3D Or inArray(i) > &H7E Then
strEncodedChar = Hex(inArray(i)).ToUpper
If strEncodedChar.Length = 1 Then
strEncodedChar = "0" & strEncodedChar
End If
stbBuff.Append("=" & strEncodedChar)
Else
stbBuff.Append(Encoding.ASCII.GetString(inArray, i, 1))
End If
Next
Return stbBuff.ToString
End Function
Public Function FromQuotedPrintableString(ByVal s As String) As Byte()
Dim bytBuff As Byte() = Encoding.ASCII.GetBytes(s)
Dim strHex As String
Dim lstBuff As New List(Of Byte)
For i As Integer = 0 To bytBuff.Length - 1
If bytBuff(i) = &H3D Then
strHex = Encoding.ASCII.GetString(bytBuff, i + 1, 2)
lstBuff.Add(Convert.ToByte(strHex, 16))
Else
lstBuff.Add(bytBuff(i))
End If
Next
Return lstBuff.ToArray()
End Function
End Class