Страница: 1 |
Страница: 1 |
Вопрос: Что за кодировка, кто-нибудь знает?
Добавлено: 15.10.06 01:09
Автор вопроса: Neco | Web-сайт:
=F3 = =D5=D7=C1=D6=C5=CE=C9=C5=CD, =E4=C5=C7=D4=D1=D2=A3=D7 = =EB=CF=CE=D3=D4=C1=CE=D4=C9=CE
=D7=C5=C4=D5=DD=C9=CA =D3=D0=C5=C3=C9=C1=CC=C9=D3=D4 = =CF=D4=C4=C5=CC=C1 =D2=C1=DA=D7=C9=D4=C9=D1 = =C6=C9=CE=C1=CE=D3=CF=D7=D9=C8 =D0=CF=D2=D4=C1=CC=CF=D7, =
=E4=E9=F4, =E1=EF = =EB=C1=DA=CB=CF=CD=CD=C5=D2=C3=C2=C1=CE=CB
Ответы
Всего ответов: 12
Номер ответа: 1
Автор ответа:
vito
Разработчик Offline Client
Вопросов: 23
Ответов: 879
Web-сайт:
Профиль | | #1
Добавлено: 15.10.06 01:24
Кажется это кодировка для почтовых сообщений...
Номер ответа: 2
Автор ответа:
Neco
ICQ: 247906854
Вопросов: 133
Ответов: 882
Web-сайт:
Профиль | | #2
Добавлено: 15.10.06 01:57
гы-гы, смешно.
в общем, вопрос снят частично - написал функцию:
Try
Dim rez As String = ""
Dim v As Integer
Dim bldr As New StringBuilder
bldr.Capacity = bad_text.Length - 1
Dim cl_s As Integer
Dim null As Char = Chr(0)
Dim twice As String
Dim intval As Integer
Dim once As Char
Do While v < bad_text.Length
v = bad_text.IndexOf("=", v)
If v = -1 Then Exit Do
twice = bad_text.Substring(v + 1, 2)
'once = null
Try
If twice = vbCrLf Then
bldr.Append(bad_text.Substring(cl_s, v - cl_s))
'bldr.Append(" "
cl_s = v + 3
Exit Try
Else
intval = CInt("&H" + twice)
End If
If intval < 256 Then
'once = Chr(intval)
bldr.Append(bad_text.Substring(cl_s, v - cl_s))
bldr.Append(Chr(intval))
cl_s = v + 3
End If
Catch ex As Exception
End Try
'If once <> null Then
' bldr.Append(bad_text.Substring(cl_s, v - cl_s))
' bldr.Append(once)
' cl_s = v + 3
'End If
v += 1
Loop
bldr.Append(bad_text.Substring(cl_s))
rez = bldr.ToString
Return rez
Catch ex As Exception
Throw ex
End Try
End Function
Обратите внимание на комменты - первоначально функция не удаляла сочетания "="+vbcrlf из текста и что примечательно - тот первоначальный алгоритм работал ГОРАЗДО медленнее, хотя действий в нём совершалось меньше. Текущий разбирает пачку писем и глазом не успеваю моргнуть, а тот задумывался секунд на пять.
Счас времени нет искать узкое место, просто интересно как-то...
Номер ответа: 3
Автор ответа:
vito
Разработчик Offline Client
Вопросов: 23
Ответов: 879
Web-сайт:
Профиль | | #3
Добавлено: 15.10.06 02:26
Мне тоже.
Вот только юмора не уловил?
Номер ответа: 4
Автор ответа:
Neco
ICQ: 247906854
Вопросов: 133
Ответов: 882
Web-сайт:
Профиль | | #4
Добавлено: 15.10.06 02:30
да это только мне и должно быть смешно.
просто я уже битую неделю кочевряжусь над разборщиком писем и твоё высказывание на этом фоне очень прикольно смотрелось. для меня...
Номер ответа: 5
Автор ответа:
vito
Разработчик Offline Client
Вопросов: 23
Ответов: 879
Web-сайт:
Профиль | | #5
Добавлено: 15.10.06 02:39
Понятно.
koi-8-r?
Номер ответа: 6
Автор ответа:
Neco
ICQ: 247906854
Вопросов: 133
Ответов: 882
Web-сайт:
Профиль | | #6
Добавлено: 15.10.06 09:17
не - это content-transfer-encoding=quoted-printable
Номер ответа: 7
Автор ответа:
vito
Разработчик Offline Client
Вопросов: 23
Ответов: 879
Web-сайт:
Профиль | | #7
Добавлено: 15.10.06 11:53
quoted-printable - стандартная кодировка? Кажтся так?
Номер ответа: 8
Автор ответа:
BUG(O)R
ICQ: 827887
Вопросов: 13
Ответов: 142
Web-сайт:
Профиль | | #8
Добавлено: 15.10.06 14:30
Когда речь идёт об оптимизации не могу сдержать себя и не поломать над задачей голову
Как вам такой вариант:
Private Sub Command1_Click()
Text1.Text = Decode(Text1.Text)
End Sub
Function Decode(lpData As String) As String
Dim SubString As String, EncodeString As String, i As Integer, j As Integer
EncodeString = lpData
i = Len(lpData)
j = 1
While i > 0
SubString = Mid(EncodeString, j, 2)
If SubString Like "[A-F0-9][A-F0-9]" Then
EncodeString = Replace(EncodeString, SubString, Chr(Val("&H" & SubString & "&"), 1, 1)
j = j + 1
End If
i = i - 1
j = j + 1
Wend
 ecode = Replace(EncodeString, "=", ""
End Function
Нужно ещё правда немного доработать его. Но кому надо измерьте скорость, в частности интересно будет сравнить с методом Neco.
Если загнать текст в сабже, то на выходе имеем:
С уважением, Дегтярёв Константин
ведущий специалист отдела развития финансовых порталов,
ДИТ, АО Казкоммерцбанк
Номер ответа: 9
Автор ответа:
Neco
ICQ: 247906854
Вопросов: 133
Ответов: 882
Web-сайт:
Профиль | | #9
Добавлено: 15.10.06 18:21
а если внутри тэгов попадётся сочетание английских букв ABBA, к примеру?
Номер ответа: 10
Автор ответа:
BUG(O)R
ICQ: 827887
Вопросов: 13
Ответов: 142
Web-сайт:
Профиль | | #10
Добавлено: 15.10.06 18:24
Так каждый символ кодируется одним байтом, такое сочетание внутри тегов == попасться не может.
PS Заменять все символы = надо до обработки. Мой косяк)
Номер ответа: 11
Автор ответа:
Neco
ICQ: 247906854
Вопросов: 133
Ответов: 882
Web-сайт:
Профиль | | #11
Добавлено: 15.10.06 19:09
кодируется не каждый символ - только русские буквы.
кстати, тут дело даже не в тэгах - просто любой английский текст в верхнем регистре и амба - лучше ориентироваться на знак равенства - он точно заменяется на =3D.
да в общем тут лучше официальный формат читать, я потому и спрашивал, но мне не очень критично - главное чтоб файлы из base64 корректно выливались, поскольку это с бабками связано, а с текстом просто для удобства использования вожусь.
Номер ответа: 12
Автор ответа:
BUG(O)R
ICQ: 827887
Вопросов: 13
Ответов: 142
Web-сайт:
Профиль | | #12
Добавлено: 20.10.06 11:13
ну в таком случае это немного видоизменит функцию, нисколько не усложнив её и не замедлив, лениво в пятницу студию запускать, не будем спорить