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?
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.