Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - Caratteri speciali ASCII C#
Forum - C# / VB.NET - Caratteri speciali ASCII C#

Avatar
lorenzo (Normal User)
Guru


Messaggi: 1178
Iscritto: 15/04/2008

Segnala al moderatore
Postato alle 21:51
Venerdì, 06/02/2009
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:

Codice sorgente - presumibilmente C# / VB.NET

  1. TcpClient tcp = new TcpClient();
  2.             string str = "ò";
  3.             NetworkStream nstr;
  4.             tcp.Connect("fisso", 2000);
  5.             nstr = tcp.GetStream();
  6.             Byte[] outPacket = Encoding.ASCII.GetBytes(str.ToCharArray());
  7.             nstr.Write(outPacket, 0, outPacket.Length);
  8.             nstr.Flush();
  9.             while (!nstr.DataAvailable)
  10.             {
  11.                 byte[] packet = new byte[1000];
  12.                 int byteCnt = nstr.Read(packet, 0, 1000);
  13.  
  14.                 string dataRcd = System.Text.Encoding.ASCII.GetString(packet);
  15.                 MessageBox.Show(dataRcd);
  16.                 break;
  17.             }


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 'ò'?

PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 17:50
Sabato, 07/02/2009
Hai già provato ad usare Encoding.UTF8 invece che Encoding.ASCII?

PM Quote
Avatar
Gianluca87 (Ex-Member)
Expert


Messaggi: 300
Iscritto: 16/11/2008

Segnala al moderatore
Postato alle 11:13
Lunedì, 09/02/2009
Testo quotato

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

PM Quote
Avatar
lorenzo (Normal User)
Guru


Messaggi: 1178
Iscritto: 15/04/2008

Segnala al moderatore
Postato alle 16:50
Lunedì, 09/02/2009
grazie adesso ci provo....

PM Quote
Avatar
lorenzo (Normal User)
Guru


Messaggi: 1178
Iscritto: 15/04/2008

Segnala al moderatore
Postato alle 21:12
Mercoledì, 11/02/2009
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?

PM Quote
Avatar
Gianluca87 (Ex-Member)
Expert


Messaggi: 300
Iscritto: 16/11/2008

Segnala al moderatore
Postato alle 11:19
Giovedì, 12/02/2009
sicuamente è un problema di codifica...
.Che protocollo usi? TCP?

PM Quote
Avatar
lorenzo (Normal User)
Guru


Messaggi: 1178
Iscritto: 15/04/2008

Segnala al moderatore
Postato alle 12:04
Giovedì, 12/02/2009
certo uso una connessione tcp

PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 17:25
Giovedì, 12/02/2009
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:
Codice sorgente - presumibilmente VB.NET

  1. For Each B As Byte In Buffer
  2.   Select Case B
  3.     Case 245 'ho messo un codice a caso
  4.       StringBuilder.Append("è")
  5.     Case ...
  6.     Case Else
  7.       StringBuilder.Append(Chr(B))
  8.   End Select
  9. Next


PM Quote