Quoted-Printableは、MIMEに規定されたエンコード方法の1つです。
携帯電話から送られるHTMLメールでQuoted-Printableが使用されているようなので、 同じように送信できるようVB2005で実装してみました。
Quoted-Printableは、「=」以外のASCII文字とスペース、タブ、改行はそのまま使用し その他の値は、8bitごとに「=」と16進数の文字に変換します。(大文字)
※符号化しない範囲:0x21〜0x3C、0x3E〜0x7E
「=」の場合、符号化された文字は、「=3D」となり「=」と16進数の文字列であらわされます。
また、1行が76文字を超える場合、改行と区別するため行末に「=」を追加し行が継続している ことがわかるように編集します。
ここでの例は、文字数の制限は考慮していません。
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
Copyright 1997-2010 BBB All rights reserved.