Auteur de questions
Sous le capot de GetEncodingData() ?

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
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
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.
-
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 -
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.