4

これが私がこれまでに得たものです(それは機能しません)。この時点で、ターゲットは Ansi エンコードされていると思っていましたが、現時点では知りたくありません。私のブラウザは、使用するエンコーディングを判断できるようですが、どうすればよいですか?

static void GetUrl(Uri uri, string localFileName)
{
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
    HttpWebResponse response;

    response = (HttpWebResponse)request.GetResponse();

    // Save the stream to file
    Stream responseStream = response.GetResponseStream();
    StreamReader reader = new StreamReader(responseStream, Encoding.Default);
    Stream fileStream = File.OpenWrite(localFileName);
    using (StreamWriter sw = new StreamWriter(fileStream, Encoding.Default))
    {
        sw.Write(reader.ReadToEnd());
        sw.Flush();
        sw.Close();
     }
}

回答後(現在、UTF-8 サイトでのみテストされています):

static void GetUrl(Uri uri, string localFileName)
{
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
    try
    {
        // Hope GetEncoding() knows how to parse the CharacterSet
        Encoding encoding = Encoding.GetEncoding(response.CharacterSet);
        StreamReader reader = new StreamReader(response.GetResponseStream(), encoding);
        using (StreamWriter sw = new StreamWriter(localFileName, false, encoding))
        {
            sw.Write(reader.ReadToEnd());
            sw.Flush();
            sw.Close();
        }
    }
    finally
    {
        response.Close();
    }
}
4

2 に答える 2

3

Web ブラウザが文字エンコーディングを検出する方法は 3 つあります。

探します (HTML の場合):

<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">

または (XHTML の場合)

<?xml version="1.0" encoding="ISO-8859-1"?>

または、httpヘッダーで指定されている場合もあります

Content-Type: text/html; charset=ISO-8859-1
于 2008-11-16T10:30:07.930 に答える
2

サーバーが応答を送信するエンコーディングを探す必要がありますEncoding.Default。ここではマスタードをカットしません。:-)

Stream responseStream = response.GetResponseStream();
Encoding enc = Encoding.GetEncoding(response.CharacterSet);
StreamReader reader = new StreamReader(responseStream, enc);
Stream fileStream = File.OpenWrite(localFileName);
using (StreamWriter sw = new StreamWriter(fileStream, enc))
{  /* ... */ }

確かに、すべてを UTF-8 に変換し、ファイルを常に UTF-8 として保存できます。そうすれば、ファイルを読み取るときにエンコーディングを推測する必要がなくなります。

于 2008-11-16T10:53:39.037 に答える