質問: 私はHtmlAgilityPackでhtmlを読んでそれを編集し、それをStreamWriterに出力しています。 HtmlAgilityPackエンコーディングはLatin1で、StreamWriterはUnicdeEncodingです。 私は変換でいくつかの文字を失っている、と私はしたくないです。 私はStreamWriterのエンコーディングを変更することができないようです。この問題を回避するにはどうすればよいですか?
回答: Webページが実際にLatin-1(ISO-8859-1)であれば、その中に中括弧を入れることはできません。 Latin-1にはこれらの文字のマッピングがありません。ブラウザーでページを開くときに中括弧が見える場合は、HTMLエンティティ( `“`と`”`または`“`および`”` )の形式になります。しかし、ヘッダーや埋め込み宣言にもかかわらず、ページのエンコーディングは実際にはwindows-1252と思われます。 windows-1252は、 `\x80..\x9F`範囲(10進数`128..159` )の制御文字をより有用な(または少なくともよりきれいな)印刷文字に置き換える点を除いて、Latin-1と同じです。 HtmlAgilityPackがその言葉でページを取得し、それをISO-8859-1として解読している場合、 `\x93`を制御文字`\u0093`に変換します。制御文字`\u0093` 、表示することができればガベージのように見えます。一方、ブラウザは、左の二重引用符のUnicodeコードポイントである`\u201C`変換します。 私はHtmlAgilityPackに慣れていないので、ドキュメントを見つけることができませんが、Windows-1252を使用するように強制しようとします。たとえば、Windows-1252(または「ANSI」)StreamReaderを作成し、それをHAPに使用させることができます。