J'ai une application héritée qui commence à mal se comporter, pour une raison que je ne suis pas sûre. Il génère un tas de code HTML qui est transformé en rapports PDF par ActivePDF.
Le processus fonctionne comme ceci:
- Extraire un modèle HTML d'une base de données contenant des jetons à remplacer (par exemple "~ CompanyName ~", "~ CustomerName ~", etc.)
- Remplacez les jetons par des données réelles
- Ranger le HTML avec une fonction regex simple qui formate les valeurs d'attribut des balises HTML (garantit les guillemets, etc., car le moteur de rendu d'ActivePDF déteste tout sauf les guillemets simples autour des valeurs d'attribut)
- Envoyez le code HTML à un service Web qui crée le PDF.
Quelque part dans ce gâchis, les espaces insécables du ou des modèles HTML
sont codés en ISO-8859-1 de sorte qu'ils s'affichent incorrectement en tant que caractère "Â" lors de l'affichage du document dans un navigateur (FireFox). ActivePDF lance sur ces caractères non UTF8.
Ma question: comme je ne sais pas d'où vient le problème et que je n'ai pas le temps d'enquêter, existe-t-il un moyen facile de ré-encoder ou de trouver et de remplacer les mauvais caractères? J'ai essayé de l'envoyer à travers cette petite fonction que j'ai jeté ensemble, mais cela transforme tout en bouffon 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?
ÉDITER:
Je m'en sors pour l'instant, même si cela ne semble pas être une bonne solution:
Private Shared Function ReplaceNonASCIIChars(ByVal html As String) As String
Return Regex.Replace(html, "[^\u0000-\u007F]", " ")
End Function