Nej. Det verkar vara rätt klurigt. Jag hittar heller inget vettigt heller för .NET (som är gratis).
Kanske leder dig på fel spår .. Men det känns ändå lite som om du får koda om själv.
Jag kollade som hastigast på C++-koden i det här projektet (metoden Decode i QuotedPrinted.cpp). I princip handlar det om att leta efter "="-tecken och koda om nästa två tecken som jag skrev ovan.
Men, som sagt, jag vet inte. Kanske finns nåt enklare ..? Andra borde ju haft samma problem, tycker man.
Jo, sant men nu vet jag iallfall vad jag är ute efter jag har försökt med en massa
Text.Enoding.GetEncoding("iso-8859-1")
på var enda byte nu vet jag vad jag skall leta efter. Så tack.
Hoppas verkligen det finns någion som gjort detta.
Jag tycker det är kasst att de inte lagt till detta i .NET iallfall.
Jag antar att åäö inte finns med i denna funktion heller.
Jo. I stora drag gör han så här:
1. Han kollar om tecknen tillhör det engelska alfabetet eller är carriage-return eller newline eller tab eller blank. I så fall lämnar han dem oförändrade.
2. Om det inte är något av dessa tecken så ersätter han med "="-tecknet + tecknets asciivärde hexadecimalt (två bytes).
3. Han loopar igenom alla rader och lägger på ett "="-tecken på alla rader som slutar med ett eller flera blanktecken.
Du skall alltså vända på detta och leta efter "="-tecken och hantera dem olika beroende på om de står vid en radbrytning, eller inte. Ett annat alternativ kunde ju vara att maila honom och fråga om han rent av har en DecodeBodyAsQuotedPrintable färdig?
Och så kontrar jag med lite VB-kod på hur min Decoder vart:
Public Function DecodeBody(ByVal sData As String) As String
Dim _pattern As String = "=.."
Dim _regEx As New Regex(_pattern)
Dim _match As Match
For Each _match IN _regEx.Matches(sData)
Dim _tmp As String = _match.Value
sData = sData.Replace(_tmp, ASCIIHexToChar(_tmp.Substring(1,_tmp.Length - 1)))
Next _match
sData = sData.Replace("=" + ControlChars.Cr, "").Replace(ControlChars.CrLf, "")
'sData = BreakLine(sData)
Return sData
End Function
Public Function ASCIIHexToChar(ByVal sHexData As String) As String
'If (sHexData = String.Empty OR sHexData.Length > 2) Then
' Throw New Exception("Argument longer than 2 characters - Argument = " + sHexData)
'End If
Dim n As Integer = 0
Dim nTmp As Integer = 0
Dim _hex As String = "0123456789ABCDEF"
n = _hex.IndexOf(sHexData.Substring(0,1))
nTmp = n * 16
n = _hex.IndexOf(sHexData.Substring(1,1))
nTmp = nTmp + n
Try
Return Convert.ToChar(nTmp).ToString
Catch
Return sHexData
End Try
End Function
Thx Nickemannen
cya,
/PatrikB
274 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e