Domanda

Quando si tenta di visualizzare un flusso di byte da HLDS (Half-Life Server Dedicato) in una casella di testo, visualizza strani a blocchi caratteri interrogativi che sembrano qualcosa di simile:

[?]

Ecco una linea di campionamento dal flusso di byte (con al posto del personaggio strano [?]):

CPU   In    Out   Uptime  Users   FPS    Players[?] 0.00  0.97  0.91    2806   182  297.25       1[?]

Ecco come visualizzo il flusso di byte come una stringa:

byte[] bytes = listener.Receive(ref sender); // get bytes from stream
TextBox1.Text = Encoding.ASCII.GetString(bytes, 0, bytes.Length); // write to textbox

I caratteri vengono visualizzati in cui [CR][LF] dovrebbe apparire normalmente. Perché è mostrando personaggi strani, e che cosa posso fare per rimuovere i caratteri strani o correggere la codifica?

***** UPDATE *****

Jon Skeet ha fornito la risposta giusta. I registri stanno tornando \ n per nuova riga (non \ r \ n) e \ 0 alla fine di ogni riga di registro in streaming. Sostituito \ n con Environment.NewLine e \ 0 con string.Empty e gli strani personaggi se ne sono andati. Grazie Jon.

È stato utile?

Soluzione

In primo luogo, credo che se le caselle di testo sempre ricevono un carattere 0, assumeranno questa è la fine dei dati - si consiglia di evitare che specificamente

.

Da dove viene il vostro flusso di byte viene? Che codifica è che significa essere? Quali sono i byte a quel punto i dati?

Altri suggerimenti

  1. Sei sicuro che i dati sono in puro ASCII? E 'forse in una delle molte, molte code-pagine?
  2. E 'forse a causa di [CR] vs [LF] vs [CR] [LF]
  3. Puoi dire utilizzare i byte che sono intorno a "I giocatori ..."? E che cosa si aspetta di vedere? We potrebbe essere in grado di riconoscere il codice-page

Presumibilmente il byte è o nella zona tabella codici (128-255), o caratteri di controllo (0-31).

Si potrebbe essere necessario sostituire manualmente con i caratteri LINEBREAK che textbox capirà, o potrebbe essere necessario rendere il vostro testo multi-linea, se non è già.

Geekpedia dice a solo assicurarsi di impostare:

TextBox1.MultiLine = true

Dopo la risposta:

Se alcuni dei personaggi aren'r CRLF, allora avete bisogno di esaminare come li stai ricevendo.

Guarda l'uscita effettiva dal Encoding.ASCII.GetString() e vedere cosa c'è dentro.

Quelli in voi esempio sono chiaramente i caratteri line-end dal momento che separano il colpo di testa dalla linea dati. CRLF dovrebbe funzionare in caselle di testo multilinea, quindi non sono sicuro di quello che sta succedendo lì (fino a verificare il contenuto byte) - gli altri personaggi possono essere sostituiti con gli spazi (che è un'opzione)

.

E, sto assumendo il carattere di questa casella di testo verrà risolto, non è proporzionale in quanto altrimenti non si allineano molto bene.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top