Voici ce que j'ai obtenu jusqu'ici (ça ne marche pas). À ce stade, je pensais que ma cible était codée Ansi, mais je ne veux vraiment pas avoir à le savoir à ce stade. Mon navigateur semble être capable de déterminer quel encodage utiliser, comment puis-je?En C#, comment enregistrer une page Web dans un fichier sans détruire l'encodage?
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();
}
}
Après des réponses (actuellement uniquement testé sur un UTF-8 site):
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();
}
}
Votre modification signifie-t-elle que vous le faites comme je l'ai suggéré? Si c'est le cas, vous devez déplacer la coche "Accepte la réponse". – Tomalak
En fait, j'y ai pensé, mais je ne connais pas le protocole ici. Comme Lubos a suggéré de vérifier le charset dans la partie du type de contenu de l'en-tête. Lubos a des informations supplémentaires, mais vous suggérez de convertir utf-8 est également très utile. J'aimerais pouvoir fusionner les réponses. – CrashCodes
La réponse de Lubos m'a conduit à Encoding.GetEncoding (response.CharacterSet) avant même que je lise votre message; mais votre message avait en fait le code C#. J'ai augmenté les deux, je lui ai laissé la réponse pour être le premier à me conduire à la réponse, et j'ai posté le code révisé pour montrer du respect pour votre poste et futurs lecteurs. – CrashCodes