Comment 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.
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 (Microsoft ActiveX Data Objects 2.5 Library)
Public Function ConvertStringToUtf8Bytes(ByRef strText As String) As Byte()
Dim objStream As ADODB.Stream
Dim data() As Byte
' init stream
Set objStream = New ADODB.Stream
objStream.Charset = "utf-8"
objStream.Mode = adModeReadWrite
objStream.Type = adTypeText
objStream.Open
' write bytes into stream
objStream.WriteText strText
objStream.Flush
' rewind stream and read text
objStream.Position = 0
objStream.Type = adTypeBinary
objStream.Read 3 ' skip first 3 bytes as this is the utf-8 marker
data = objStream.Read()
' close up and return
objStream.Close
ConvertStringToUtf8Bytes = data
End Function