Comm WinSock VB6 <-> VB.Net (Encoding, UTF-8, Unicode)

Signaler
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
-
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
-
Bonjour,

Ce n'est pas à proprement parler une question mais plutôt une astuce nécessaire si on veut faire dialoguer deux applications :
- l'une faite en VB6 et utilisant le composant Winsock
- l'autre faite sous VB.Net

La méthode .SendData du composant Winsock (VB6) propose d'envoyer un tableau de Bytes, mais elle accepte aussi d'utiliser une chaine de caractère, en l'occurrence Unicode puisque VB6 gère des chaines Unicode.

Le problème qui se pose est que les caractères accentués émis par VB6 ne sont pas correctement transmis et reçu par VB.Net.
La raison est simple et tient dans une simple ligne dans l'aide que j'ai mis 4h à trouver :
"Si une chaîne UNICODE est passée en entrée, elle est convertie en une chaîne ANSI avant d'être envoyée sur le réseau"

Or, côté VB.Net, ANSI n'est pas reconnu comme un encodage et, à ma connaissance, il n'y a pas d'outil de conversion dans les frameworks.

Solution : Convertir proprement la chaine de caractères à transmettre dans le SendData en préparant le tableau de Byte nécessaire.

Après quelques recherches, la méthode la plus rapide et la plus simple est cette source trouvée sur le Net : http://www.nonhostile.com/howto-convert-byte-array-utf8-string-vb6.asp
et qui s'appuie sur les Stream la bibliothèque ADODB

2 réponses

Messages postés
31467
Date d'inscription
samedi 12 mai 2007
Statut
Webmaster
Dernière intervention
14 mai 2021
2
Salut Jack,

Et pourquoi ne pas mettre cette méthode dans la FAQ plutôt que dans le forum, elle se perdra moins qu'ici ?

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
75
Quoi ?
On a une FAQ (Tutos) ?

Non, je plaisante.
Oui, tu as tout à fait raison.
Je copie-colle.

Vala
Jack [MVP VB]
NB : Je ne répondrai pas aux messages privés