0

属性のhtml値を変換するのに苦労してきましたが、成功しませんでした。

これが私が変換しようとしているHTMLです(文字セットがここに表示されないことを確認してください、しかし、私はあなたがそれを見るのとまったく同じようにそれを見る)。

<a href="https://sistemas.usp.br/jupiterweb/listarGradeCurricular?codcg=12&amp;codcur=12012&amp;codhab=1&amp;tipo=N" target="_blank">Administração – São Paulo – diurno</a>

了解しました。このhtmlnodeの値は「Administração--SãoPaulo--diurno」です。

私はHtmlAgilityPackを使用してこれについてHtmlPageを解析しています。このノードに到達すると、そのinnerText値は次のようになります。Administração â São Paulo â diurno

ページの元の文字セットはUTF-8であると想定しています。これは、htmlのエンコーディングタグが私に言っていることだからです。

この奇妙な文字列を:に変換するにはどうすればよいAdministração - São Paulo - Diurnoですか?

私はすでにこれらのスレッドを試しました:スレッド1スレッド2 、そして何も私の問題を解決しませんでした

編集:C#WebRequestGetを介してページを取得しています。

EDIT2:HtmlAgilityPackタグを追加

問題は特定されました:WebRequestが時々Htmlを台無しにしています。

エンコーディングを設定する他の方法はありますか?私が試しているのは:_webReq.Encoding = "ISO-8859-1"

前もって感謝します

4

2 に答える 2

2

簡単なテストの後、文字列が適切にエンコードされて元の形式に戻っていないことがわかります。

サンプルテスト:

 var item = "Administração - São Paulo - Diurno";
 Console.WriteLine(item);

 var buffer = Encoding.UTF8.GetBytes(item);
 var item2 = Encoding.Default.GetString(buffer);
 Console.WriteLine(item2);

これは印刷します:

Administraçao - Sao Paulo - Diurno
AdministraA§A£o - SA£o Paulo - Diurno

ご覧のとおり、元の文字列はUTF8を使用してバイトに変換されていますが、デフォルトのエンコーディングを使用して文字列に変換されています。

これは間違っています。

WebRequest.GetResponse()が文字列を間違った値として返している場合は、そのメソッドに問題があります。HttpWebRequestのTransferEncodingプロパティをUTF8に設定してみてください。

TransferEncodingプロパティを設定する前に、まずSendChunkedプロパティをtrueに設定する必要があります。TransferEncodingをnullに設定してクリアしても、SendChunkedの値には影響しません。TransferEncodingプロパティに割り当てられた値は、既存のコンテンツを置き換えます。

または、開いたStreamReaderでエンコーディングをUTF8に設定してみることもできます。あなたのコードを見ることができますか?

于 2012-07-06T14:26:09.023 に答える
0

私は解決しました:

    HtmlWeb Webget = new HtmlWeb();
    HtmlDocument doc = new HtmlDocument();
    Webget.AutoDetectEncoding = false;
    Webget.OverrideEncoding = Encoding.UTF8;

    doc_tmp.OptionOutputAsXml = true;
    doc_tmp.OptionReadEncoding = true;
    doc_tmp.OptionFixNestedTags = true;
    doc_tmp.OptionDefaultStreamEncoding = Encoding.UTF8;

            doc_tmp.LoadHtml(tmp.InnerHtml);
            doc_tmp.Save(Console.Out);
于 2017-04-20T15:11:00.630 に答える