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

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.