IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Vérification de l'encodage en utf-8


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    info
    Inscrit en
    Mars 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : info

    Informations forums :
    Inscription : Mars 2007
    Messages : 51
    Par défaut Vérification de l'encodage en utf-8
    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 ?

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    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 :

    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;
            }
        }
    }
    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
    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");
    }
    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

  3. #3
    Membre confirmé
    Profil pro
    info
    Inscrit en
    Mars 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : info

    Informations forums :
    Inscription : Mars 2007
    Messages : 51
    Par défaut
    Merci cela m'aide beaucoup.

  4. #4
    Membre émérite Avatar de kheironn
    Homme Profil pro
    Chef de projets technique C# / MVC / .Net
    Inscrit en
    Février 2007
    Messages
    823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets technique C# / MVC / .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2007
    Messages : 823
    Par défaut
    @Tomlev :
    Ca gère BOM/pas BOM ?

  5. #5
    Membre confirmé
    Profil pro
    info
    Inscrit en
    Mars 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : info

    Informations forums :
    Inscription : Mars 2007
    Messages : 51
    Par défaut
    D'après mes tests oui (passage du fichier en utf-8 bom et utf-8 depuis notepad++).

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par kheironn Voir le message
    @Tomlev :
    Ca gère BOM/pas BOM ?
    Je pense que ça marche avec ou sans BOM... à vérifier

  7. #7
    Membre confirmé
    Profil pro
    info
    Inscrit en
    Mars 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : info

    Informations forums :
    Inscription : Mars 2007
    Messages : 51
    Par défaut
    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.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Encodage : Conversion UTF-8 vers ISO-8859-?
    Par polo54 dans le forum Général Java
    Réponses: 6
    Dernier message: 26/06/2007, 19h10
  2. Réponses: 1
    Dernier message: 24/04/2007, 18h19
  3. encodage en UTF-8
    Par ChBoc dans le forum Servlets/JSP
    Réponses: 7
    Dernier message: 26/10/2006, 04h28
  4. Problème d'encodage en UTF-8
    Par navis84 dans le forum Langage
    Réponses: 5
    Dernier message: 29/08/2006, 11h19
  5. [C#] Encodage en UTF et ASCII
    Par Machjaghjolu dans le forum C#
    Réponses: 3
    Dernier message: 11/11/2005, 02h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo