3

以下のコード スニペットを使用して、HTTP 応答をローカル ファイルにダウンロードしています。URL にあるコンテンツが多言語 (中国語、日本語、タイ語のデータなど) である場合があります。ContentEncoding ヘッダーを使用してコンテンツが UTF-8 エンコーディングであることを指定していますが、これは ASCII で生成されるローカル出力ファイルには影響しません。これにより、多言語データが破損します。何か助けはありますか?

using (var webClient = new WebClient())
        {
            webClient.Credentials = CredentialCache.DefaultCredentials;
            webClient.Headers.Add(HttpRequestHeader.UserAgent, "Mozilla/4.0");
            webClient.Headers.Add(HttpRequestHeader.ContentEncoding, "utf-8");

            webClient.DownloadFile(url, @"c:\temp\tempfile.htm");
        }
4

1 に答える 1

7

ContentEncodingヘッダーは、文字セットの指定には使用されません。クライアントがサポートするエンコーディング (圧縮) の種類を示すために使用されます。

クライアントは、送信する文字セットをサーバーに伝えることができません。サーバーは、そのデータと、使用されている文字セットを示すいくつかのヘッダー フィールドを送信します。通常、ContentTypeヘッダーにあり、次のようになりますtext/html; charset=UTF-8

を使用している場合はWebClient、プロパティをフォールバックとして設定してEncoding、サーバーが文字セットを識別しない場合にデフォルトが使用されるようにします。例えば:

WebClient client = new WebClient();
client.Encoding = Encoding.UTF8;
string s = client.DownloadString(DownloadUrl);

詳細については、 http://www.informit.com/guides/content.aspx?g=dotnet&seqNum=800を参照してください。

于 2012-07-18T02:28:39.270 に答える