VB.NET конвертировать Unicode 8 (UTF8) в обычный американский ASCII - PullRequest
0 голосов
/ 08 января 2012

У меня проблема в том, что выходные данные отладки

"?uƒn74tn5187r&key=6e6e0936c4e6c48be56a72eba8964df0"

должны быть

"?u=83n74tn5187r&key=6e6e0936c4e6c48be56a72eba8964df0"

Я пробовал решение от другогоПодобный вопрос, и он меня не удался.

Dim uni As Byte() = Encoding.GetEncoding(437).GetBytes("?uƒn74tn5187r&key=6e6e0936c4e6c48be56a72eba8964df0")
Dim Ascii As String = Encoding.ASCII.GetString(uni)

Ascii = "?u?n74tn5187r&key=6e6e0936c4e6c48be56a72eba8964df0"

Полагаю, мне нужно угадать 437 ... возможно, грубая атака всех чисел до матчаиз ?u=83 из ?uƒ

На самом деле я пытаюсь прочитать Unicode-32 (форматированный в Бразилии текст из электронной почты (POP3). Теперь, когда я думаю об этом, =83 может быть испорчен с помощью этой функцииздесь.

Но без этой функции тело письма POP3 будет содержать, возможно, бесполезный вариант urlencode (), но .. вместо %20 используется =20.

IИнтересно, как это исправить.

 Public Shared Function DecodeQuotedPrintable(ByVal Message As String, Optional ByVal QuickClean As Boolean = False) As String
        'set up StringBuilder object with data stripped of any line continuation tags
        Dim Msg As New StringBuilder(Message.Replace("=" & vbCrLf, vbNullString))

        If QuickClean Then                                                  'perform a quick clean (clean up common basics)
            Return Msg.Replace("=" & vbCrLf, vbNullString).Replace("=0D", vbCr).Replace("=0A", _
                                   vbLf).Replace("=20", " ").Replace("=3D", "=").ToString
        Else                                                                'perform total cleaning
            'store 2-character hex values that require a leading "0"
            Dim HxData As String = "X0102030405060708090A0B0C0D0E0F"
            For Idx As Integer = 1 To &HF                                   'initially process codes 1-15, which require a leading zero
                Msg.Replace("=" & Mid(HxData, Idx << 1, 2), Chr(Idx))       'replace hex data with single character code (SHIFT is faster)
            Next
            For idx As Integer = &H10 To &HFF                               'process the whole 8-bit extended ASCII gambit
                Msg.Replace("=" & Hex(idx), Chr(idx))                       'replace hex data with single character code
            Next
            Return Msg.ToString                                             'return result string
        End If
    End Function

Редактировать: Моя попытка исправить функцию (если это действительно вызывает проблему? Я никогда не узнаю)

PublicСовместно используемая функция DecodeQuotedPrintable (сообщение ByVal As String, необязательный ByVal QuickClean As Boolean = False) As String 'setup Объект StringBuilder с данными, удаленными из любых тегов продолжения строки

1 Ответ

1 голос
/ 08 января 2012

"ƒ" обозначено = 83 в кодировке для печати в кавычках в наборе символов Windows-1252.

...