1

HtmlAgilityPack で html を読み込んで編集し、StreamWriter に出力しています。HtmlAgilityPack Encoding は Latin1 で、StreamWriter は UnicdeEncoding です。

変換でいくつかの文字が失われていますが、そうなってほしくありません。

StreamWriter のエンコーディングを変更できないようです。この問題を回避するのに最適なものは何ですか?

4

3 に答える 3

1

Web ページが実際に Latin-1 (ISO-8859-1) である場合、中括弧を含めることはできません。Latin-1 には、これらの文字のマッピングはありません。ブラウザーでページを開いたときに巻き引用符が表示される場合は、HTML エンティティ ( “and”または“and ”) の形式である可能性があります。しかし、ヘッダーと埋め込み宣言が何を言っているかにかかわらず、ページのエンコーディングは実際には windows-1252 であると思われます。

\x80..\x9Fwindows-1252 は、範囲内の制御文字 (decimal 128..159) をより便利な (または少なくともきれいな) 印刷文字に置き換えることを除いて、Latin-1 と同じです。HtmlAgilityPack がページをその単語で取得し、それを ISO-8859-1 としてデコードする場合\x93、制御文字\u0093に変換されます。これを表示できる場合は、ゴミのように見えます。一方、ブラウザは\u201C、左二重引用符の Unicode コード ポイントである に変換します。

私は HtmlAgilityPack に精通しておらず、ドキュメントも見つかりませんが、windows-1252 を使用するように強制しようとします。たとえば、windows-1252 (または "ANSI") の StreamReader を作成し、HAP にそれを使用させることができます。

于 2009-07-13T02:19:21.257 に答える
0

推測では; Stream(ではなく)に書き込みstringます。string(inc. StringWriter/に書き込む場合はStringBuilder、.NET の UTF-16 文字列を暗黙的に使用しています。

報告されたエンコーディングを微調整したいだけの場合(ただし a を使用string)、Jon の回答 hereを参照してください。

于 2009-07-12T10:21:14.360 に答える
0

どのエンドでキャラクターを失うかは明確ではありません。いずれにせよ、単なるエンコーディングの不一致自体は問題ではありません。正しい文字を取得する必要があります。Unicode StreamWriter が文字化けした文字を書き出す場合、それはそもそも入力時にガベージを受け取ったことを意味します。これはおそらく、HtmlAgilityPack がページのエンコーディングを間違っていたことを意味します。エンコーディングを手動で設定するオプションがある場合は、それを行うことをお勧めします。

また、間違ったエンコーディング宣言を含む HTML ページがある可能性もあります。<meta>たとえば、Latin-1 として宣言する要素を含む UTF-8 ファイルである可能性があります。テキストはどこから入手しますか?Web から直接ダウンロードしますか、それともテキスト ファイルで入手しますか? 後者の場合、そのファイルをどのように作成しますか? メモ帳を使用して手動で行った場合、または を介し​​てコードで行った場合StreamWriterは、UTF-8 ファイルがある可能性があります。

于 2009-07-12T10:52:34.313 に答える