2012-01-07 6 views
0

У меня есть вещь, проблема здесь отладочные выходыVB.NET Преобразование Unicode 8 (UTF8) в Стационарный американский ASCII

"?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 (текст в формате Brasil от электронной почты (POP3). Теперь, когда я думаю об этом, =83 может быть испорчен, используя эту функцию здесь.

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

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

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 

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

Public Shared Function DecodeQuotedPrintable (ByVal Message As String, Optional ByVal QuickClean As Boolean = False) As String «создан объект StringBuilder с данными раздели ни строки продолжения тегов 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" 

    Msg.Replace("=" & vbCrLf, vbNullString).Replace("=0D", vbCr).Replace("=0A", _ 
          vbLf).Replace("=20", " ").Replace("=3D", "%$#@[EQUALS]@#$%").ToString() 

    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 

    Msg.Replace("%$#@[EQUALS]@#$%", "=") 

    Return Msg.ToString            'return result string 
End If 

End Function

ответ

1

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

+0

круто, поэтому я исправил его, проблема заключалась в том, что он читал параметры URL как кодировку – SSpoke