Oppure

Loading
06/02/09 20:51
lorenzo
Eccomi di nuovo!!!!!

Ho un piccolo problema con i byte in c#.
Ho un serverino in vb6 che deve ricevere dei nominativi dal client c#

il codice del client:

TcpClient tcp = new TcpClient();
            string str = "ò";
            NetworkStream nstr;
            tcp.Connect("fisso", 2000);
            nstr = tcp.GetStream();
            Byte[] outPacket = Encoding.ASCII.GetBytes(str.ToCharArray());
            nstr.Write(outPacket, 0, outPacket.Length);
            nstr.Flush();
            while (!nstr.DataAvailable)
            {
                byte[] packet = new byte[1000];
                int byteCnt = nstr.Read(packet, 0, 1000);

                string dataRcd = System.Text.Encoding.ASCII.GetString(packet);
                MessageBox.Show(dataRcd);
                break;
            }

Se faccio il debug vedo che il carattere 'ò' quando viene convertito in byte, diventa 63 ma secondo il codice ASCII 63 = '?' ed infatti è quello che riceve vb6.

Come faccio a convertire 'ò'?
aaa
07/02/09 16:50
Il Totem
Hai già provato ad usare Encoding.UTF8 invece che Encoding.ASCII?
aaa
09/02/09 10:13
Gianluca87
Postato originariamente da Il Totem:

Hai già provato ad usare Encoding.UTF8 invece che Encoding.ASCII?

quoto totem se non ricordo male la codifica di winsock in vb6 usa UTF8 come standard di caratteri di codifica e decodifica
aaa
09/02/09 15:50
lorenzo
grazie adesso ci provo....
aaa
11/02/09 20:12
lorenzo
niente da fare
anche con UTF8 mi vengono caratteri strani. Ho provato Unicode e funziona ma la stringa che riceve vb6 contiene alternate le lettere della parola corretta con dei quadrati. Come posso eliminarli?
aaa
12/02/09 10:19
Gianluca87
sicuamente è un problema di codifica...
.Che protocollo usi? TCP?
aaa
12/02/09 11:04
lorenzo
certo uso una connessione tcp
aaa
12/02/09 16:25
Il Totem
Anche a me è successo. Se non riesci ad eliminare il problema facendo un controllo con un if (che sembra inutile, ma non lo è poi tanto, dato che una volta mi ha funzionato), e sostituendo i caratteri speciali con gli stessi, ma usando uno stringbuilder, allora non c'è niente da fare. Insomma, il mio esempio era del tipo:
For Each B As Byte In Buffer
  Select Case B
    Case 245 'ho messo un codice a caso
      StringBuilder.Append("è")
    Case ...
    Case Else
      StringBuilder.Append(Chr(B))
  End Select
Next
aaa