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 回答