caracteres estranhos retornou de fluxo de bytes?

votos
0

Ao tentar exibir um fluxo de bytes de HLDS (Half-Life Servidor Dedicado) em uma caixa de texto, exibe estranhas caracteres ponto de interrogação em blocos que algo parecido com isto:

[?]

Aqui está uma linha de amostra do fluxo de bytes (com no lugar do personagem estranho [?]):

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

Aqui está como eu exibir o fluxo de bytes como uma string:

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

Os personagens estão aparecendo onde [CR][LF]normalmente deve aparecer. Por que é mostrando caracteres estranhos, e o que posso fazer para remover os caracteres estranhos ou corrigir a codificação?

***** UPDATE *****

Jon Skeet deu a resposta certa. Os registos são retornando \ n para nova linha (não \ r \ n) e \ 0 no final de cada linha de registo transmitido. \ N substituído por Environment.NewLine e \ 0 com string.Empty e os caracteres estranhos sumiram. Obrigado Jon.

Publicado 06/02/2009 em 08:53
fonte usuário
Em outras línguas...                            


3 respostas

votos
1

Em primeiro lugar, eu acredito que se caixas de texto já recebem um personagem 0, eles vão assumir que é o fim dos dados - você pode querer proteger contra isso especificamente.

Onde o seu fluxo de bytes vem? O que codificação é que significava ser? Quais são os bytes nesse ponto nos dados?

Respondeu 06/02/2009 em 09:08
fonte usuário

votos
1

Você pode ter que substituí-los manualmente com personagens LINEBREAK que caixa de texto vai entender, ou você pode ter que fazer a sua caixa de texto multi-linha, se não é já.

Geekpedia diz apenas certifique-se de definir:

TextBox1.MultiLine = true

Depois de resposta:

Se alguns dos personagens aren'r CRLF, então você precisa examinar como você está recebendo-os.

Olhe para a saída real de Encoding.ASCII.GetString()e ver o que está lá dentro.

Os de você exemplo são claramente personagens-end linha, uma vez que separar o cabeçalho da linha de dados. CRLF devem trabalhar em caixas de texto de várias linhas para que eu não tenho certeza do que está acontecendo lá (até que você verificar o conteúdo de bytes) - os outros caracteres podem ser substituídos com espaços (que é uma opção).

E, eu estou supondo que a fonte desta caixa de texto será corrigido, e não proporcional pois caso contrário não vai alinhar muito bem.

Respondeu 06/02/2009 em 08:57
fonte usuário

votos
1
  1. Você tem certeza que os dados estão em ASCII puro? É, talvez, em um dos muitos, muitos códigos de páginas?
  2. É talvez por causa de [CR] vs [LF] vs [CR] [LF]?
  3. Você pode dizer usar os bytes que estão ao redor "Os jogadores ..."? E o que você espera ver? Nós pode ser capazes de reconhecer o código de páginas

Presumivelmente, o byte é quer na zona de página de código (128-255), ou os caracteres de controlo (0-31).

Respondeu 06/02/2009 em 08:56
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more