Bonjour,
je suis en train de faire un programme qui doit vérifier que l'encodage des caractères est en utf-8.
Vérifier le BOM ne suffit pas, et je souhaiterai valider le fichier caractère par caractère avez vous une méthode ?
Bonjour,
je suis en train de faire un programme qui doit vérifier que l'encodage des caractères est en utf-8.
Vérifier le BOM ne suffit pas, et je souhaiterai valider le fichier caractère par caractère avez vous une méthode ?
C'est pas très évident, tu peux pas le faire en utilisant directement l'objet Encoding, il faut passer par le Decoder et sa propriété Fallback. J'ai fait une petite méthode d'extension qui permet de tester si le contenu est correct :
Pour l'utiliser tu peux faire ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 public static class Extensions { public static bool TryGetString(this Encoding encoding, byte[] bytes, out string result) { return encoding.TryGetString(bytes, 0, bytes.Length, out result); } public static bool TryGetString(this Encoding encoding, byte[] bytes, int index, int count, out string result) { result = null; var decoder = encoding.GetDecoder(); decoder.Fallback = DecoderFallback.ExceptionFallback; try { int charCount = decoder.GetCharCount(bytes, index, count); char[] chars = new char[charCount]; decoder.GetChars(bytes, index, count, chars, 0); result = new string(chars); return true; } catch(DecoderFallbackException) { return false; } } }
Soit dit en passant, c'est pas génial de devoir catcher l'exception... idéalement il faudrait implémenter un DecoderFallback personnalisé, mais j'ai pas encore trouvé comment faire
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 byte[] bytes = File.ReadAllBytes(fileName); string text; if (Encoding.UTF8.TryGetString(bytes, out text)) { Console.WriteLine("L'encodage UTF8 du fichier est correct"); } else { Console.WriteLine("L'encodage UTF8 du fichier est incorrect"); }
Pas de questions techniques par MP ! Le forum est là pour ça...
Tutoriels : Les nouveautés de C# 6 - Accès aux données avec Dapper - Extraction de données de pages web à l'aide de HTML Agility Pack - La sérialisation XML avec .NET (Aller plus loin) - Les markup extensions en WPF
@Tomlev :
Ca gère BOM/pas BOM ?
D'après mes tests oui (passage du fichier en utf-8 bom et utf-8 depuis notepad++).
Pas de questions techniques par MP ! Le forum est là pour ça...
Tutoriels : Les nouveautés de C# 6 - Accès aux données avec Dapper - Extraction de données de pages web à l'aide de HTML Agility Pack - La sérialisation XML avec .NET (Aller plus loin) - Les markup extensions en WPF
Bonjour,
comment peut-on faire lorsque l'on lit un fichier ligne par ligne et utiliser la solution donnée en exemple car j'utilise de gros fichier et lorsque j'utilise readallbyte c'est très lourd.
Y-a-t-il un moyen de lire le fichier ligne par ligne et boucler ?
Merci.
Partager