none
Sous le capot de GetEncodingData() ? RRS feed

  • Question

  • Bonjour à tous...

    Sur les conseils de tomlev, "forumeur" développez.com, je viens vous poser ici la même question que j'ai posé là bas :).

    J'utilise un composant pour pouvoir manipuler des mails (Dart /Power TCP Mail). Je suis récemment tombé sur un bug de ce composant qui explose à la lecture d'un mail qui utilise le charset "cp1252". En cherchant un peu, j'ai compris que l'explosion remonte en fait de la méthode Encoding.GetEncoding(string) qui ne fonctionne pas si on lui passe "cp1252".

    D'après mes recherches le "cp1252" est un alias (non officiel ?) de "windows-1252". Effectivement, si je remplace toutes les occurences de "cp1252" par "windows-1252" dans le mail, le composant parvient à le traiter.

    J'ai également vu que la liste des charsets était définie dans la base de registre.

    HKEY_LOCAL_MACHINE\SOFTWARE\Classes\MIME\Database\Charset
    J'ai donc tenté de rajouter cet alias pour voir si la méthode GetEncoding le trouvait mais sans succés.

    Pour finir, j'ai essayé de comprendre comment fonctionne Encoding.GetEncoding() et là je butte sur la méthode interne suivante :

     

    [MethodImpl(MethodImplOptions.InternalCall)]
    private static extern unsafe InternalEncodingDataItem* GetEncodingData();
    
    Savez-vous s'il est possible de connaître le mode de fonctionnement de cette méthode ? Si j'ai la chance que dans cette méthode la liste des charsets n'est pas "hardcodée", je pourrais peut être résoudre mon problème.

    Merci,

    Tetranos

    vendredi 2 juillet 2010 08:32

Toutes les réponses

  • Bonjour,

     

    Windows-1252 et CP1252 c’est la même chose. Toutefois, il est possible d’avoir une différence dans GetEncoding. Désolé de ne pas être plus précis sur cet aspect mais, pour le moment, je ne connais pas l’implémentation.

     

    Pouvez-vous écrire une partie de votre code ou ‘cp1252’ est passé à GetEncoding ?

     

    Cordialement,

    Alex

    ________________

    Publiez un article sur une de ces technologies : Visual Basic, C#, C++, .NET, ASP.NET, SQL Server, Silverlight, SharePoint 2010, SharePoint 2007

    Astuces pour Visual Studio 2010

    Didacticiels et astuces : VB.NET, C#, ASP.NET, .NET Framework, Silverlight, Workflow Foundation, WPF

    Café des usages

    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

     

     

     

    vendredi 2 juillet 2010 11:45
  • Bonjour,

    La méthode GetEncodingData() appelle une fonctionne interne du CLR.

    Ne pouvez-vous pas contacter directement l'éditeur et soumettre le bogue ?

    Cordialement


    Gilles TOURREAU - MVP C# - MCTS Windows Forms - Architecte .NET/Consultant/Formateur - http://gilles.tourreau.fr
    vendredi 2 juillet 2010 19:09
    Modérateur
  • Alex :

    Et bien il suffit simplement de faire Encoding.GetEncoding("cp1252") et boom...ArgumentException, "cp1252" is not a valid value for parameter "name"...quelque chose comme çà...

     

    Gilles :

    J'ai effectivement posté le bug sur le forum de l'éditeur du composant mais visiblement il ne sort qu'une release par an, du coup je cherche autre chose.

    mardi 6 juillet 2010 11:22