Question sur les codages: Comment puis-je sortir de HtmlAgilityPack sur un StringWriter et conserver le codage?

.net c# encoding html-agility-pack

Question

Je lis le code HTML avec HtmlAgilityPack, le modifie, puis le renvoie vers un StreamWriter. HtmlAgilityPack Encoding est Latin1 et StreamWriter est UnicdeEncoding.

Je perds des caractères dans la conversion et je ne veux pas l'être.

Je ne semble pas pouvoir changer le codage d'un StreamWriter. Quel est le meilleur autour de ce problème?

Réponse acceptée

Si la page Web est réellement Latin-1 (ISO-8859-1), elle ne peut contenir aucune citation bouclée. Latin-1 n'a pas de mappage pour ces caractères. Si vous pouvez voir des guillemets bouclés lorsque vous ouvrez la page dans votre navigateur, ils peuvent se présenter sous la forme d'entités HTML ( “ et ” ou “ et ” ). Mais je soupçonne que l'encodage de la page est vraiment Windows-1252 malgré ce que disent les en-têtes et les déclarations intégrées.

windows-1252 est identique à Latin-1, à la différence près qu'il remplace les caractères de contrôle de la plage \x80..\x9F (décimal 128..159 ) par des caractères d'impression plus utiles (ou du moins plus 128..159 ). Si HtmlAgilityPack prend la page au mot et le décode au format ISO-8859-1, il convertira \x93 en caractère de contrôle \u0093 , ce qui ressemblera à de la \u0093 si vous pouvez le faire afficher. Le navigateur, quant à lui, le convertira en \u201C , le point de code Unicode du guillemet double gauche.

Je ne suis pas familier avec HtmlAgilityPack et je ne trouve pas de documentation pour cela, mais j'essayerais de le forcer à utiliser Windows-1252. Par exemple, vous pouvez créer un StreamReader Windows-1252 (ou "ANSI") et le faire utiliser par HAP.


Réponse d'expert

À une conjecture; écrire dans un Stream (pas une string ). Si vous écrivez dans une string (y StringWriter / StringBuilder , vous utilisez implicitement la chaîne UTF-16 de .NET.

Si vous voulez juste modifier l'encodage rapporté (mais utilisez une string ), regardez la réponse de Jon ici .




Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi