Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    Conversione Ascii di un NetworkStream: problema

    Salve a tutti,

    sto cercando di sviluppare una rudimentale applicazione che vada a connettersi ad un server POP3 e mi recupera le e-mails.
    Uso un System.Net.Sockets.TcpClient per connettermi al server pop3 e un System.Net.Sockets.NetworkStream per scambiare i dati (inviarli e leggere le risposte del server).

    Il problema che devo risolvere mi si presenta solo con alcuni server Pop3 e non su tutti, avviene che la risposta di questi server contiene qualche carattere strano che non riesce ad essere convertito correttamente in ascii, la conversione la effettuo in questo modo:

    miavariabile = Encoding.ASCII.GetString(bytes)

    dove bytes è una variabile Byte riempita con i dati di risposta contenuti dal NetworkStream e miavariabile è una variabile string dove vengono immagazzinati i dati di risposta del server (quindi l'email) in formato stringa.

    In particolare avviene che i caratteri ascii superiori a 127 vengano convertiti in "?" punti interrogativi, ma alcuni server rispondono in modo tale che l'encoding funziona, altri no restituiscono solo una serie si ???????????????????? molto lunga.
    Cosa molto importante che ho notato sui server che rispondono "male" è che se associo al NetworkStream un Streamwriter e scrivo il contenuto in un file di testo, i caratteri vengono scritti correttamente nel file di testo. Il mio scopo è farli scrivere bene in un Db mysql, devo usare una sorta di scrittura con uno stream? Visto che con lo streamwriter per i files funziona, oppure c'è un altro modo per effettuare una conversione che funzioni?

    Spero di essere stato chiaro e avervi fornito le informazioni per potermi aiutare

    Saluti

  2. #2
    Ho risolto e siccome mi sono scervellato abbastanza, per evitare a coloro che si imbatteranno nello stesso problema di sbattere la testa nel muro, posto la soluzione:

    Praticamente ho filtrato i caratteri ascii con una funzione che toglie i caratteri che abbiano valore numerico nella tabella ascii inferiore a 10 e superiore a 127.

    La funzione è la seguente
    codice:
    Function SoloAscii(ByRef Testo as string)
    	Dim i as Integer
    	Dim AsciiPuliti, carattere as String
    	For i = 1 to len(Testo)
    		carattere = mid(Testo, i , 1)
    		If Asc(carattere) <= 127 and Asc(carattere) >= 10 then AsciiPuliti += carattere
    	Next
    	Return AsciiPuliti
    End Function
    Saluti

  3. #3
    Ma non sarà una questione di decodifica?

  4. #4
    Io ho risolto con la soluzione di prima, ma se ci sono soluzioni migliori sono sempre ben accette.

    @Max Mercury: intendi la codifica del db? Perchè a me il problema nasce quando voglio memorizzare i dati in una variabile String, non ci sono ancora arrivato al DB.

  5. #5
    No pensavo che magari dipendeva da quale decodifica si usava per leggere i dati dalla
    stringa, ma sono solo supposizioni perche in realtà non saprei esattamente come comportarmi

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.