J'ai une application héritée juste de commencer à faire des siennes, pour quelque raison que ce soit, je ne suis pas sûr. Il génère un tas de code HTML qui est transformé en PDF rapports par ActivePDF.
Le processus fonctionne comme ceci:
- Tirez un modèle HTML à partir d'une base avec des jetons dans il être remplacé (par exemple, "~CompanyName~", "~CustomerName~", etc.)
- Remplacer les jetons avec des données réelles
- De l'ordre sur le code HTML avec une simple fonction regex que la propriété formats HTML balise de valeurs d'attribut (assure guillemets, etc, depuis ActivePDF le moteur de rendu de hait rien mais des guillemets simples autour de valeurs d'attribut)
- Envoyer le code HTML pour un service web qui crée le fichier PDF.
Quelque part dans ce désordre, les espaces insécables à partir du modèle HTML (
s) sont l'encodage ISO-8859-1, de sorte qu'elles s'affichent de manière incorrecte comme un "Â" caractère lors de l'affichage du document dans un navigateur (FireFox). ActivePDF dégueule sur ces non-caractères UTF8.
Ma question: comme je ne sais pas d'où le problème vient du fait et n'ont pas le temps pour l'explorer, est-il un moyen facile de ré-encoder ou trouver et remplacer les mauvais caractères? J'ai essayé de l'envoyer par le biais de cette petite fonction que j'ai jeté, mais il tourne tout en gobbledegook ne change rien.
Private Shared Function ConvertToUTF8(ByVal html As String) As String
Dim isoEncoding As Encoding = Encoding.GetEncoding("iso-8859-1")
Dim source As Byte() = isoEncoding.GetBytes(html)
Return Encoding.UTF8.GetString(Encoding.Convert(isoEncoding, Encoding.UTF8, source))
End Function
Des idées?
EDIT:
Je suis avec cela pour l'instant, bien qu'il ne semble guère être une bonne solution:
Private Shared Function ReplaceNonASCIIChars(ByVal html As String) As String
Return Regex.Replace(html, "[^\u0000-\u007F]", " ")
End Function