エンコードに関する質問:HtmlAgilityPackからStringWriterに出力してエンコードを保持するにはどうすればよいですか?

.net c# encoding html-agility-pack

質問

私は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に使用させることができます。


エキスパート回答

推測すると、 Stream書き込む( stringはない)。 stringStringWriter / StringBuilder )に書き込むと、.NETのUTF-16文字列が暗黙的に使用されます。

報告されたエンコーディングを微調整したいだけですが( string使用する)、 ここでJonの答えを見てください




ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ