Страница: 1 |
получиля тут с почтового сервера письмо через винсок (вручную) и получилос у меня нечто такое: This is a multi-part message in MIME format. ------=_NextPart_000_00D8_01C32706.45037F50 KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq ------=_NextPart_000_00D8_01C32706.45037F50 Как мне это дело перевести в человеческую речь? У кого-нибудь есть готовый алгоритм?
это прикреплённый файл закодированный в семибитной кодировке base64 я недавно где-то видел описание данной кодировки - сделать раскодирующюю приладу несложно. но можно сделать проще: копируешь этот текст в файл, даёшь файлу расширение ".uue" и открываешь его WinZip'ом RFC2045 На сайте есть алгоритм работы с base64 (по-моему раздел VBA) Павел, это было-бы конечно хорошо, если-бы не одно НО, я в .Net хуже чем полный ноль...... Если есть возможность, можеш этот класс как-нить в LL запечатать? вот отрыл примерно такой код: Const Table As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=" Function GetBin(Dec As Single, cFormat As Integer) As String Function GetDec(Bin As String) As Long Function Base64ToAscii(sSource As String) As String но он мне тоже билебирду выдал( код для декодирования из/в UUE: проверено! работает! Public Function UUDecodeToFile(strUUCodeData As String, strFilePath As String) Dim vDataLine As Variant Dim vDataLines As Variant Dim strDataLine As String Dim intSymbols As Integer Dim intFile As Integer Dim strTemp As String If Left$(strUUCodeData, 6) = "begin " Then strUUCodeData = Mid$(strUUCodeData, InStr(1, strUUCodeData, vbLf) + 1) End If If Right$(strUUCodeData, 4) = "end" + vbLf Then strUUCodeData = Left$(strUUCodeData, Len(strUUCodeData) - 7) End If intFile = FreeFile Open strFilePath For Binary As intFile vDataLines = Split(strUUCodeData, vbLf) For Each vDataLine In vDataLines strDataLine = CStr(vDataLine) intSymbols = Asc(Left$(strDataLine, 1)) strDataLine = Mid$(strDataLine, 2, intSymbols) For i = 1 To Len(strDataLine) Step 4 strTemp = strTemp + Chr((Asc(Mid(strDataLine, i, 1)) - 32) * 4 + _ (Asc(Mid(strDataLine, i + 1, 1)) - 32) \ 16) strTemp = strTemp + Chr((Asc(Mid(strDataLine, i + 1, 1)) Mod 16) * 16 + _ (Asc(Mid(strDataLine, i + 2, 1)) - 32) \ 4) strTemp = strTemp + Chr((Asc(Mid(strDataLine, i + 2, 1)) Mod 4) * 64 + _ Asc(Mid(strDataLine, i + 3, 1)) - 32) Next i Put intFile, , strTemp strTemp = "" Next Close intFile End Function Public Function UUEncodeFile(strFilePath As String) As String Dim intFile As Integer 'file handler Dim intTempFile As Integer 'temp file Dim lFileSize As Long 'size of the file Dim strFileName As String 'name of the file Dim strFileData As String 'file data chunk Dim lEncodedLines As Long 'number of encoded lines Dim strTempLine As String 'temporary string Dim i As Long 'loop counter Dim j As Integer 'loop counter Dim strResult As String ' 'Get file name strFileName = Mid$(strFilePath, InStrRev(strFilePath, "\") + 1) ' 'Insert first marker: "begin 664 ..." strResult = "begin 664 " + strFileName + vbLf ' 'Get file size lFileSize = FileLen(strFilePath) lEncodedLines = lFileSize / 45 + 1 ' 'Prepare buffer to retrieve data form 'the file by 45 symbols chunks strFileData = Space(45) ' intFile = FreeFile ' Open strFilePath For Binary As intFile For i = 1 To lEncodedLines If i = lEncodedLines Then strFileData = Space(lFileSize Mod 45) End If Get intFile, , strFileData strTempLine = Chr(Len(strFileData) + 32) If i = lEncodedLines And (Len(strFileData) Mod 3) Then strFileData = strFileData + Space(3 - (Len(strFileData) Mod 3)) End If For j = 1 To Len(strFileData) Step 3 strTempLine = strTempLine + Chr(Asc(Mid(strFileData, j, 1)) \ 4 + 32) strTempLine = strTempLine + Chr((Asc(Mid(strFileData, j, 1)) Mod 4) * 16 _ + Asc(Mid(strFileData, j + 1, 1)) \ 16 + 32) strTempLine = strTempLine + Chr((Asc(Mid(strFileData, j + 1, 1)) Mod 16) * 4 _ + Asc(Mid(strFileData, j + 2, 1)) \ 64 + 32) strTempLine = strTempLine + Chr(Asc(Mid(strFileData, j + 2, 1)) Mod 64 + 32) Next j strResult = strResult + strTempLine + vbLf strTempLine = "" Next i Close intFile strResult = strResult & "'" & vbLf + "end" + vbLf UUEncodeFile = strResult End Function Страница: 1 |
Вопрос: MIME Формат
Добавлено: 02.03.04 22:10
Автор вопроса: ZoomerSD | ICQ: 148640473
Content-Type: text/plain;
charset="koi8-r"
Content-Transfer-Encoding: base64
KioqDQr3z9DSz9M6IOvByyDQz9fF08nU2CDOwc3F0tTXzyDTydPUxc3VPz8/DQrh19TP0iDP1NfF
1ME6IEpPTmljaw0K79TXxdQg0M/M1d7FzjogMzAuMDUuMjAwMyAyMzo1MDozNw0KKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQoNCg0K
DQrRIMvByy3UzyDSwdogd2luMmsg18Xbwcwg1MHLIDoNCg0KbmV0IHNoYXJlIC9kZWxldGUgZDoN
Cg0Kz84g1SDNxc7RINDPxNXNwcwgySDTyc7JyiDcy9LBziDX0s/ExSDX2cTBzCzQz9fJ0yDLz9LP
3sUNCg0KIA0KDQoNCg0KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqDQrv1NfF1MnU2CDOwSDc1M8g08/Pwt3FzsnFIDxodHRwOi8vd3d3
LnZibmV0LnJ1L2ZvcnVtL2FkZC5hc3A/aWQ9MTY4NzI+IA0K8M/TxdTJ1Nggxs/S1c0gPGh0dHA6
Ly93d3cudmJuZXQucnUvZm9ydW0vZGVmYXVsdC5hc3A+IA0KKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQo=
Ответы
Всего ответов: 8
Номер ответа: 1
Автор ответа:
Чан
ICQ: 26977559
Вопросов: 4
Ответов: 18
Профиль | | #1
Добавлено: 02.03.04 23:27
Номер ответа: 2
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #2
Добавлено: 03.03.04 08:45
Номер ответа: 3
Автор ответа:
Павел
Администратор
ICQ: 326066673
Вопросов: 368
Ответов: 5968
Web-сайт:
Профиль | | #3
Добавлено: 03.03.04 10:34
Я где-то видал код работы с Base64 на VB6... Но на больших объёмах
данных он будет жутко тормозить...
Я рад, что в .NET есть встроенная реализация Base64
А вообще, я даже класс на VB .NET дял разбора MIME писал. Если надо,
пришлю.
Номер ответа: 4
Автор ответа:
Александр
Разработчик Offline Client
ICQ: 204034
Вопросов: 106
Ответов: 1919
Профиль | | #4
Добавлено: 03.03.04 16:02
Номер ответа: 5
Автор ответа:
ZoomerSD
ICQ: 148640473
Вопросов: 135
Ответов: 270
Профиль | | #5
Добавлено: 03.03.04 16:02
Номер ответа: 6
Автор ответа:
Павел
Администратор
ICQ: 326066673
Вопросов: 368
Ответов: 5968
Web-сайт:
Профиль | | #6
Добавлено: 03.03.04 16:43
В DLL переводить очень гемморойно... Да и за VB6 браться совсем не
хочется.
Номер ответа: 7
Автор ответа:
ZoomerSD
ICQ: 148640473
Вопросов: 135
Ответов: 270
Профиль | | #7
Добавлено: 03.03.04 18:39
Dim sFormat As String
sFormat = String(cFormat, "0")
If Dec = 64 Then GetBin = "00000 ": Exit Function
If Dec = 0 Then GetBin = sFormat: Exit Function
Do While Dec >= 1
Dec = Int(Dec) / 2
If Dec = Int(Dec) Then
GetBin = 0 & GetBin
Else
GetBin = 1 & GetBin
End If
Loop
GetBin = Format$(GetBin, sFormat)
End Function
If InStr(1, Bin, "=") Then GetDec = 64: Exit Function
If InStr(1, Bin, " ") Then GetDec = 256: Exit Function
Dim Cnt As Integer
Cnt = Len(Bin) - 1
For t = 1 To Len(Bin)
If Mid(Bin, t, 1) = 1 Then
GetDec = GetDec + (2 ^ Cnt)
End If
Cnt = Cnt - 1
Next
End Function
Dim Bin As String, Pos As Integer, sLen As Long, sKrt As Long, dBrake As Long
sLen = Len(sSource)
For t = 1 To Len(sSource) Step 4
Bin = ""
For l = t To t + 3
Pos = InStr(1, Table, Mid$(sSource, l, 1))
Bin = Bin & GetBin(CStr(Pos - 1), 6)
Next l
For m = 1 To Len(Bin) Step 8
If GetDec(Mid$(Bin, m, 8)) <> 256 Then
Base64ToAscii = Base64ToAscii & Chr$(GetDec(Mid$(Bin, m, 8)))
End If
Next m
Next t
End Function
Номер ответа: 8
Автор ответа:
2San
Вопросов: 11
Ответов: 68
Профиль | | #8
Добавлено: 03.03.04 19:32