C# - obtenir si le fichier est en utf8 ou ansi

Contenu du snippet

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

A voir également