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 :

[C# 2.0] Comment réaliser un encodage UTF-8 ?


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Par défaut [C# 2.0] Comment réaliser un encodage UTF-8 ?
    Bonjour,

    je suis confronté à un problème d'encodage des plus étranges et j'espère que vous pourrez m'aider à y voir plus clair.

    J'ai une application qui reçoit un fichier Xml à traiter. Ce fichier Xml est généré par une application tierce, et le fichier est au format ISO-8259-1. Pour traiter ce fichier je dois avant tout le réencoder en UTF-8. J'ai fait ca au plus simple car après tout, je ne pensais pas avoir de surprises
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    String content = File.ReadAllText(monFichier, Encoding.Default);
    File.WriteAllText(monFichier, content, Encoding.UTF8);
    Une fois réencodé, je passe ce fichier dans une moulinette qui utilise une API que l'on m'a fourni pour réaliser une signature électronique. Et c'est là que le problème se présente, j'ai en effet une erreur car l'API me dit que le fichier n'est pas au format UTF-8. L'erreur survient sur les caractères accentués, lorsque je consulte les fichiers de log de l'API.

    J'ai alors testé une chose. J'ai mis de côté le fichier réencodé avec l'application. J'ai ouvert le fichier original (celui en ISO-8259-1 donc) avec PSPad, un petit éditeur de texte gratuit, et j'ai converti le fichier en UTF-8 à partir de là. En comparant, en héxadécimal, les deux fichiers UTF-8 j'ai constaté une différence. Le fichier UTF-8 généré en .Net possède 3 octets supplémentaires en début de fichier. De plus, le fichier converti avec PSPad est traité sans aucun problème par l'API.

    Je ne comprends pas qu'il y ai une différence, car les pages de codes sont bien définies il me semble. Je devrais donc avoir le même résultat, et pourtant non.

    Quelqu'un a-t-il eu à faire à ce type de mésaventure ?

  2. #2
    Membre expérimenté
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Par défaut
    Bon, j'ai réussi à faire accepter le fichier par l'API, mais au prix d'une bidouille qui ne me plait guère.

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    String content = File.ReadAllText(file.FullName, enc);
    File.WriteAllText(file.FullName, content, Encoding.UTF8);
    // TODO : bidouille pour faire passer l'encodage pour l'API
    byte[] bytes = File.ReadAllBytes(file.FullName);
    byte[] b = new byte[bytes.Length - 3];
    for (int i = 3; i < bytes.Length; i++)
    {
        b[i - 3] = bytes[i];
    }
    File.WriteAllBytes(file.FullName, b);
    content = File.ReadAllText(file.FullName, enc);
    ile.WriteAllText(file.FullName, content, Encoding.UTF8);
    Ce que je ne comprends pas c'est que :
    1. ca fonctionne, l'API prend bien mon fichier
    2. dans le fichier original les accents (le é par exemple) sont remplacés (en é par exemple)
    3. une fois traité (appel de la méthode de signature de l'API), les accents sont de retours

    Alors le problème vient-il de l'API que l'on m'a fourni ?

  3. #3
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Il est courant d'ajouter au début d'un fichier texte quelques caractères permettant d'indiquer l'encoding de ce fichier. L'idée est que sans rien savoir d'un document, on puisse l'ouvrir dans le bon format. On comment par le lire octet par octet, puis dès qu'on a détecté l'encoding, on lit le reste du document avec le décodeur qui va bien. Le nombre et la valeur de ces caractères dépend de l'encodage.

    Je pense que ton API ne connais pas cette convention, et butte dessus.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

Discussions similaires

  1. msi ou comment réaliser un installeur?
    Par herzleid dans le forum Delphi
    Réponses: 11
    Dernier message: 09/04/2007, 19h27
  2. [DBGrid avec Cumul]Comment réaliser un cumul dans un DBGrid
    Par Eric SAULNIER dans le forum Bases de données
    Réponses: 2
    Dernier message: 21/07/2004, 17h56
  3. [WebForms] Encodage, UTF-8 et accents
    Par alexischmit dans le forum Général Dotnet
    Réponses: 4
    Dernier message: 28/04/2004, 12h21
  4. Comment réaliser des modèles de documentations avec XML ?
    Par Dams76 dans le forum XML/XSL et SOAP
    Réponses: 6
    Dernier message: 29/08/2003, 02h15

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