Question

Lorsque vous essayez d'afficher un flux d'octets de HLDS (Half-Life Dedicated Server) dans une zone de texte, il affiche d'étranges personnages trapus point d'interrogation qui ressemble à quelque chose comme ceci:

[?]

Voici une ligne d'échantillon à partir du flux d'octets (avec à la place du caractère étrange [?]):

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

Voici comment j'afficher le flux d'octets sous forme de chaîne:

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

Les caractères apparaissent où devrait normalement apparaître [CR][LF]. Pourquoi est-il montre des personnages étranges, et que puis-je faire pour supprimer les caractères étranges ou corriger l'encodage?

***** UPDATE *****

Jon Skeet a fourni la bonne réponse. Les billes reviennent \ n de saut de ligne (non \ r \ n) et \ 0 à la fin de chaque ligne de journal diffusé. Remplacée \ n avec Environment.NewLine et \ 0 avec string.Empty et les personnages étranges ont disparu. Merci Jon.

Était-ce utile?

La solution

Tout d'abord, je crois que si jamais un textboxes reçoivent 0 caractère, ils assumeront c'est la fin des données - vous pouvez protéger contre cette spécifiquement

.

D'où vient votre flux d'octets viennent? Quel encodage est-il signifie être? Quels sont les octets à ce moment-là dans les données?

Autres conseils

  1. Êtes-vous sûr que les données sont en ASCII pur? Est-ce peut-être dans l'une des nombreuses pages de code?
  2. Est-ce peut-être à cause de [CR] vs [LF] vs [CR] [LF]?
  3. Pouvez-vous dire utiliser les octets qui sont autour « des joueurs ... »? Et ce que vous attendez de voir? Nous peut être en mesure de reconnaître le code page

On peut supposer que l'octet est soit dans la zone de page de code (128-255), ou des caractères de commande (0-31).

Vous pourriez avoir à les remplacer manuellement avec des caractères linebreak qui textbox comprendront, ou vous pourriez avoir à faire de votre zone de texte multiligne si elle est pas déjà.

Geekpedia dit de faire juste que vous définissez:

TextBox1.MultiLine = true

Après la réponse:

Si certains des personnages aren'r CRLF, alors vous avez besoin d'examiner la façon dont vous les obtenir.

Regardez la sortie réelle de voir ce qui Encoding.ASCII.GetString() est là-dedans.

Ceux de vous par exemple, sont clairement des caractères de fin de ligne car ils séparent l'en-tête de la ligne de données. CRLF devrait travailler dans les zones de texte multiligne donc je ne suis pas sûr de ce qui se passe là-bas (jusqu'à ce que vous vérifiez le contenu des octets) - les autres caractères peuvent être remplacés par des espaces (c'est une option)

.

Et, je suppose que la police de cette zone de texte sera fixé, non proportionnelle sinon il ne sera pas aligner très bien.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top