webForumDet fria alternativet

Dekoda body delen i mail?

.NET

4 svar · 242 visningar · startad av PatrikB

Medlem sedan mars 20002 836 inlägg
Frågan#1

Hello!

sitter och försöker att dekoda en sträng som har extraherats efter hämtning av mail från pop3-server.

strängen ser ut som så här i mailet:
S=E5 str=E4ck p=E5 dig

Men jag vill dekoda den så att den får sitt "rätta utseende":
Så sträck på dig

Försöker Dekoda så här, utan lyckat resultat:

            Public Function DecodeBody(ByRef enc As System.Text.Encoding, ByRef sData As String) As String
                Dim _ms As New MemoryStream(System.Text.Encoding.ASCII.GetBytes(sData))
                Dim _b As Integer = _ms.ReadByte()

                Dim _tmpMS As New MemoryStream()

                While (_b > -1)
                    Dim _encChar As String = enc.GetString(New Byte() {CType(_b, Byte)})
                    Dim _d AS Byte() = System.Text.Encoding.Unicode.GetBytes(_encChar)

					_tmpMS.Write(_d,0,_d.Length)

                    _b = _ms.ReadByte()
                End While

                Return System.Text.Encoding.Unicode.GetString(_tmpMS.ToArray())
            End Function

Argumentet enc är av typen utf-7 eller utf-8

Men inte hjälper det inte .....

Hittade oxå lite i System.Globalization.NumberStyles.HexNumber och försökte med detta:

            Public Function Decode(ByRef enc As System.Text.Encoding, ByRef sData As String) As String
                Dim _ms As New MemoryStream(System.Text.Encoding.ASCII.GetBytes(sData))
                Dim _b As Integer = _ms.ReadByte()

                Dim _tmpMS As New MemoryStream()

                While (_b > -1)
                    Dim _value As Integer = Int32.Parse(System.Text.Encoding.ASCII.GetString(_b),System.Globalization.NumberStyles.HexNumber);
                    Dim _encChar As String = enc.GetString(new byte(){CType(_value, Byte)})
                    Dim _d AS Byte() = System.Text.Encoding.Unicode.GetBytes(_encChar)

					_tmpMS.Write(_d,0,_d.Length)

                    _b = _ms.ReadByte()
                End While

                Return System.Text.Encoding.Unicode.GetString(_tmpMS.ToArray())
            End Function

Då får jag Invalid character .... har det med CrLf att göra? hur kan jag kolla om min variabel _b innehåller CrLf?

Någon som har förslag?

cya,
/PatrikB

Medlem sedan apr. 20012 266 inlägg
#2

Denna tråd kan nog passa: http://www.webforum.nu/showthread.php?s=&threadid=69940

Medlem sedan mars 20002 836 inlägg
#3

tackar renholm.
Fortsatte i tråden du tipsade om med en lösning för VB.NET

... eller, din lösning konverterad till VB.NET ... :e

cya,
/PatrikB

Medlem sedan juni 20022 599 inlägg
#4

PatrikB skrev:

eller, din lösning konverterad till VB.NET

Om vi ska vara lite petiga så är faktiskt ASCIIHexToChar min kollegas egenhändigt skrivna gamla VB4-kod från ~98 som har fått ett helt nytt .NET-liv tack vare Nickemannen. (Fast du har korrigerat hans originalstavfel som bara hade ett "i".) ;)

Källa

Medlem sedan mars 20002 836 inlägg
#5

Där ser man .... vad är det man säger:
Återanvändning!

cya,
/PatrikB

255 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
121 ms — deklarationer (db)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)
119 ms — ändringar (db)