Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: MIME Формат Добавлено: 02.03.04 22:10  

Автор вопроса:  ZoomerSD | ICQ: 148640473 

получиля тут с почтового сервера письмо через винсок (вручную) и получилос у меня нечто такое:

This is a multi-part message in MIME format.

------=_NextPart_000_00D8_01C32706.45037F50
Content-Type: text/plain;
 charset="koi8-r"
Content-Transfer-Encoding: base64

KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqDQr3z9DSz9M6IOvByyDQz9fF08nU2CDOwc3F0tTXzyDTydPUxc3VPz8/DQrh19TP0iDP1NfF
1ME6IEpPTmljaw0K79TXxdQg0M/M1d7FzjogMzAuMDUuMjAwMyAyMzo1MDozNw0KKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQoNCg0K
DQrRIMvByy3UzyDSwdogd2luMmsg18Xbwcwg1MHLIDoNCg0KbmV0IHNoYXJlIC9kZWxldGUgZDoN
Cg0Kz84g1SDNxc7RINDPxNXNwcwgySDTyc7JyiDcy9LBziDX0s/ExSDX2cTBzCzQz9fJ0yDLz9LP
3sUNCg0KIA0KDQoNCg0KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqDQrv1NfF1MnU2CDOwSDc1M8g08/Pwt3FzsnFIDxodHRwOi8vd3d3
LnZibmV0LnJ1L2ZvcnVtL2FkZC5hc3A/aWQ9MTY4NzI+IA0K8M/TxdTJ1Nggxs/S1c0gPGh0dHA6
Ly93d3cudmJuZXQucnUvZm9ydW0vZGVmYXVsdC5hc3A+IA0KKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQo=

------=_NextPart_000_00D8_01C32706.45037F50

Как мне это дело перевести в человеческую речь? У кого-нибудь есть готовый алгоритм?

Ответить

  Ответы Всего ответов: 8  

Номер ответа: 1
Автор ответа:
 Чан



ICQ: 26977559 

Вопросов: 4
Ответов: 18
 Профиль | | #1 Добавлено: 02.03.04 23:27

это прикреплённый файл закодированный в семибитной кодировке base64

я недавно где-то видел описание данной кодировки - сделать раскодирующюю приладу несложно.

но можно сделать проще: копируешь этот текст в файл, даёшь файлу расширение ".uue" и открываешь его WinZip'ом

Ответить

Номер ответа: 2
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #2
Добавлено: 03.03.04 08:45

RFC2045

Ответить

Номер ответа: 3
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #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

На сайте есть алгоритм работы с base64 (по-моему раздел VBA)

Ответить

Номер ответа: 5
Автор ответа:
 ZoomerSD



ICQ: 148640473 

Вопросов: 135
Ответов: 270
 Профиль | | #5 Добавлено: 03.03.04 16:02

Павел, это было-бы конечно хорошо, если-бы не одно НО, я в .Net хуже чем полный ноль...... Если есть возможность, можеш этот класс как-нить в ;DLL запечатать? 

Ответить

Номер ответа: 6
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #6
Добавлено: 03.03.04 16:43
В DLL переводить очень гемморойно... Да и за VB6 браться совсем не
хочется.

Ответить

Номер ответа: 7
Автор ответа:
 ZoomerSD



ICQ: 148640473 

Вопросов: 135
Ответов: 270
 Профиль | | #7 Добавлено: 03.03.04 18:39

вот отрыл примерно такой код:

Const Table As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="

Function GetBin(Dec As Single, cFormat As Integer) As String
    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

Function GetDec(Bin As String) As Long
    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

Function Base64ToAscii(sSource As String) As String
    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

код для декодирования из/в 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 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам