une version 125 fois plus rapide que l'ancienne!!!
Adaptation au jeu de caractère.
Je me suis aperçu du problème quand j'essayé de décoder email codé avec du utf-8, du coup la première version de ma fonction donnait des résultats bizarres! et la cause est le jeu de caractères!
Le code est facile à comprendre il suffit de suivre avec du pas à pas
si vous voulez un truc à décoder bah ouvrez un fichier .eml avec notepade et cherchez
Content-Transfer-Encoding="quoted-printable"
copier ce qui a en dessus oui le truc avec plein d'= ;)
suivez pas à pas et vous comprendrez.
Source / Exemple :
'mettre ca dans une module
Friend Function QuotePrintNew(ByVal brute As String, ByVal charset As String) As String
Dim resul As String = ""
Dim deco As System.Text.Encoding
Try
deco = System.Text.Encoding.GetEncoding(charset)
Catch ex As Exception
deco = System.Text.Encoding.GetEncoding("iso-8859-1")
End Try
If deco.IsSingleByte Then 'ce tupe de codage se fait -il sur 1 ou 2 bytes
resul = LookForSimple(deco, brute) 'codage sur un byte ex blabla=57 veut dire blabla & chr(57)
'mais le résultat dépend du type de codage
Else
resul = LookForDouble(deco, brute) 'codage sur 2 bytes blabla=57=87
End If
Return resul
End Function
Private Function LookForDouble(ByVal deco As System.Text.Encoding, ByVal brute As String) As String
Dim i As Integer = 1
Dim j As Integer = 0
Dim temp As New System.Text.StringBuilder
Dim ch As Char
Dim table(1) As Byte
Try
Do While i <= brute.Length
ch = Mid(brute, i, 1)
If ch <> "=" Then
temp.Append(ch)
i += 1
Else
If Mid(brute, i + 1, 2) <> vbCrLf Then
table(0) = CByte("&H" & Mid(brute, i + 1, 2))
i += 3
If Mid(brute, i, 1) = "=" Then
If Mid(brute, i + 1, 2) <> vbCrLf Then
table(1) = CByte("&H" & Mid(brute, i + 1, 2))
i += 3
Else
table(1) = CByte("&H" & Mid(brute, i + 4, 2))
i += 6
End If
End If
temp.Append(deco.GetString(table))
Else
temp.Append(vbCrLf)
i += 3
End If
End If
Loop
Catch ex As Exception
End Try
Return temp.ToString
End Function
Friend Function LookForSimple(ByVal deco As System.Text.Encoding, ByVal brute As String) As String
Dim i As Integer = 1
Dim temp As New System.Text.StringBuilder
Dim ch As Char
Dim table(0) As Byte
Do While i <= brute.Length
ch = Mid(brute, i, 1)
If ch <> "=" Then
temp.Append(ch)
i += 1
Else
If Mid(brute, i + 1, 2) = vbCrLf Then
temp.Append(vbCrLf)
i += 3
Else
table(0) = CByte("&H" & Mid(brute, i + 1, 2))
temp.Append(deco.GetString(table))
i += 3
End If
End If
Loop
Return temp.ToString
End Function
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.