241 votes

Codage des questions - caractère « Â » apparaît au lieu de HTML » »

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:

  1. Tirez un modèle HTML à partir d'une base avec des jetons dans il être remplacé (par exemple, "~CompanyName~", "~CustomerName~", etc.)
  2. Remplacer les jetons avec des données réelles
  3. 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)
  4. 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

379voto

bobince Points 270740

Quelque part dans ce désordre, les espaces insécables à partir du modèle HTML (s) de l'encodage ISO-8859-1, de sorte qu'elles s'affichent de manière incorrecte comme un "Â" caractère

Ce serait le codage UTF-8, ISO-8859-1. L'espace insécable est le byte 0xA0 est ISO-8859-1; lorsqu'ils sont encodés en UTF-8, ça serait 0xC2,0xA0, qui, si vous (à tort) la considèrent comme ISO-8859-1 en tant que " ". Qui comprend une fuite nbsp dont vous ne pouvez pas le remarquer; si cet octet n'est pas là, alors quelque chose d'autre a malmené votre document et nous avons besoin de voir plus haut à savoir quoi.

Quelle est la regexp, comment la création de modèles de travail? Il semble être un bon analyseur HTML impliqué quelque part, si votre   chaînes sont (bien) être transformé en U+00A0 ESPACE insécable caractères. Si oui, vous pouvez simplement le processus de votre modèle de mode natif dans les DOM, et de lui demander de serialise à l'aide de l'encodage ASCII pour garder les caractères non-ASCII comme des références. Ce serait aussi arrêter de vous avoir à faire des regex de post-traitement sur le code HTML lui-même, qui est toujours fortement de l'affairisme.

Enfin de toute façon, pour le moment, ajoutez:

<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />

à votre document de la tête et de voir si cela fait-il regarder à droite dans le navigateur. Si oui, alors aucun problème restant est ActivePDF la faute.

25voto

JediN1nja Points 66

Si quelqu'un avait le même problème que moi et le jeu de caractères a déjà eu raison, simplement cela :

  1. Copiez tout le code dans le fichier .html.
  2. Ouvrez le bloc-notes (ou n’importe quel éditeur de texte basique) et collez le code.
  3. Aller «-> fichier enregistrer sous »
  4. Entrez vous déposer le nom « example.html » (sélectionner « Enregistrer en tant que type : tous les fichiers (.) »)
  5. Sélectionnez le codage UTF-8
  6. Appuyez sur enregistrer et vous pouvez supprimer de noe que fixer votre ancien fichier .html et l’encodage

-1voto

Mohika Points 31

Dans mon cas je devenais signe de la croix latine au lieu nbsp, même qu’une page a été correctement encodée en UTF-8. Rien qui précède a aidé à résoudre le problème et j’ai tout essayé.

En fin de compte, changement de police pour IE (avec navigateur css spécifique) a aidé, j’utilisais Helvetica-Nue comme une police de corps changeant l’Arial a résolu le problème.

-3voto

FourPart Points 1

J'ai eu le même genre de problème. Apparemment, c'est tout simplement parce que PHP ne reconnaît pas l'utf-8.

J'ai été déchirant mes cheveux au début, quand un '£' gardé signe montrant que '£', bien que figurant sur ok dans DreamWeaver. Finalement, je me suis souvenu que j'avais eu des problèmes avec des liens par rapport à l'indice de fichier, lorsque les pages, si on les regarde directement serait de travailler avec des diaporamas, mais pas lorsqu'il est utilisé avec un include (mais c'est à côté de la question. De toute façon, je me demandais si cela pourrait être un problème similaire, donc au lieu de mettre dans la page que j'ai eu des problèmes avec, j'ai simplement mis dans le index.php fichier - problème fixe tout au long de.

-3voto

al123 Points 300

La raison de ceci est que PHP ne reconnaît pas utf-8.

Ici vous pouvez le vérifier pour tous les caractères spéciaux en HTML

http://www.degraeve.com/Reference/specialcharacters.php

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X