La précédente source était pratique si le fichier d'origine est bien enregistré correctement.
-
http://www.csharpfr.com/code.aspx?ID=35661
Dans mon cas, le fichier a été créé par une autre étape que je ne contrôle pas. La fonction de test précédente ne fonctionne pas dessus. Il a donc fallut trouver une autre astuce afin de savoir si le contenu est en UTF8 ou ANSI (c'est les deux possibilités que j'avais).
Comme je l'ai expliqué ici :
-
http://blogs.developpeur.org/fabrice69/archive/2006/01/20/16665.aspx
Le chargement en utilisant l'encodage UTF8 d'un fichier ANSI fait disparaître les caracteres accentués. Etant donné que mon fichier d'origine a des lignes qui sont tous d'une taille fixe, voila la solution trouvé et qui fonctionne.
Source / Exemple :
/// <summary>
/// Effectue un test sur le fichier afin de contrôler qu'il soit UTF8 ou Default
/// </summary>
/// <param name="CheminFichier">Chemin du fichier</param>
/// <param name="longueurLigne">Taille prévue pour chaque ligne</param>
/// <returns>Vrai si UTF8, faux sinon</returns>
private bool testlongueurligneUTF(string CheminFichier, int longueurLigne)
{
bool retour = true;
StreamReader sr = new StreamReader(CheminFichier, Encoding.UTF8);
string s = string.Empty ;
while ((s = sr.ReadLine()) != null)
{
if((s.Length < longueurLigne)&&(s.Length > 0))
{
retour = false;
break;
}
}
return retour;
}
// ......
// Pour l'utiliser :
Encoding Monencoding;
// ....
if (testlongueurligneUTF(Cheminfichier, 839))
{
Resultat.Append("Fichier : "+ Cheminfichier +" - Format UTF8"+ Environment.NewLine);
Monencoding = Encoding.UTF8;
}
else
{
Resultat.Append("Fichier : "+ Cheminfichier +" - Format ANSI"+ Environment.NewLine);
Monencoding = Encoding.Default;
}
sr = new StreamReader(Cheminfichier, Monencoding);
// ....
Conclusion :
Si ca peut vous servir.
Bon Coding
Romelard Fabrice