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

Dotnet Discussion :

Sous le capot de GetEncodingData() ?


Sujet :

Dotnet

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juin 2008
    Messages
    47
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juin 2008
    Messages : 47
    Par défaut Sous le capot de GetEncodingData() ?
    Bonjour à tous.

    J'ai remarqué que Encoding.GetEncoding(string) ne fonctionne pas si on l'appelle avec "cp1252".
    Je ne suis pas du tout expert en la matière mais il semble que "cp1252" soit un alias pas mal répandu pour "windows-1252".

    En essayant de comprendre le fonctionnement de cette méthode (Reflector mon ami...), je suis tombé sur la fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [MethodImpl(MethodImplOptions.InternalCall)]
    private static extern unsafe InternalEncodingDataItem* GetEncodingData();
    J'avais espoir que celle-ci utilise la base de registre mais l'ajout de la clé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\MIME\Database\Charset\cp1252]
    "AliasForCharset"="windows-1252"
    ne change rien...

    Savez vous s'il est possible de savoir comment fonctionne GetEncodingData ? Ou mieux, savez-vous comment fonction GetEncodingData ?

    Merci,

  2. #2
    Membre averti
    Inscrit en
    Juin 2008
    Messages
    47
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juin 2008
    Messages : 47
    Par défaut
    bon ben je crois qu'il va falloir que je me débrouille autrement...

  3. #3
    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
    Pour GetEncodingData, aucune idée... Visiblement c'est une méthode interne du framework implémentée en code natif, donc pas moyen de voir ce qu'elle fait.

    A priori "cp1252" signifie "CodePage 1252"... et justement, une des surcharges de GetEncoding prend en paramètre un numéro de codepage, donc il suffit de faire ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Encoding.GetEncoding(1252);
    Sinon, j'ai pas l'impression que l'info vienne de la base de registre... en surveillant les accès avec Process Monitor, j'ai rien vu passer qui semble concerner l'encodage

  4. #4
    Membre averti
    Inscrit en
    Juin 2008
    Messages
    47
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juin 2008
    Messages : 47
    Par défaut
    En fait, je ne suis pas maître du code.

    Nous utilisons pour recevoir/traiter des e-mails "Power TCP Mail" de Dart. Nous sommes tombé sur le cas d'un mail qui fait exploser le composant. Cet email utilise le charset cp1252.

    C'est en décompilant leur source que j'ai compris que l'erreur remonte en fait de la méthode GetEncoding.

    Dart sort une release de ce composant environ une fois l'an et je ne pense pas avoir un fix rapide de la part de Microsoft.... Je m'étais donc dit qu'en comprenant le fonction de GetEncodingData je pourrais peut être m'en sortir car j'ai du mal à croire qu'ils aient "hardcodé" la liste des charsets. Cela dit, pour des pbs de perfs c'est pas impossible...

  5. #5
    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 Tetranos Voir le message
    j'ai du mal à croire qu'ils aient "hardcodé" la liste des charsets
    Effectivement ce serait étonnant... et si c'était le cas, je vois pas pourquoi ils auraient besoin de le faire en code non managé.

    Essaie de poster sur les forums MSDN, y a souvent des gens de MS qui répondent, donc tu auras sans doute plus de chances de trouver une solution

  6. #6
    Membre averti
    Inscrit en
    Juin 2008
    Messages
    47
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juin 2008
    Messages : 47
    Par défaut
    Si j'ai bien compris le sens de l'attribut "MethodImplOptions.InternalCall", ce n'est pas du code non managé, mais du code IL...enfin pas sûr.

    En tout cas merci pour les conseils, je vais tenter ma chance sur les forums MSDN.

Discussions similaires

  1. Réponses: 0
    Dernier message: 10/12/2009, 07h04
  2. Problème d'installation oracle 8.1.7 sous NT
    Par Anonymous dans le forum Installation
    Réponses: 7
    Dernier message: 02/08/2002, 14h18
  3. OmniORB : code sous Windows et Linux
    Par debug dans le forum CORBA
    Réponses: 2
    Dernier message: 30/04/2002, 17h45
  4. Je ne peux établir une connexion cliente sous Linux.
    Par Anonymous dans le forum CORBA
    Réponses: 5
    Dernier message: 16/04/2002, 15h57
  5. Réponses: 4
    Dernier message: 27/03/2002, 11h03

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