Frage

Beim Versuch, ein Byte-Stream von HLDS anzuzeigen (Half-Life Dedicated Server) in einem Textfeld, zeigt es seltsam blocky Fragezeichen Zeichen, die wie folgt aussehen:

[?]

Hier ist eine Beispielzeile aus dem Byte-Stream (mit anstelle des seltsamen Zeichen [?]):

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

Hier ist, wie ich den Byte-Stream als Zeichenfolge angezeigt werden:

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

Die Zeichen erscheinen, wo [CR][LF] sollte in der Regel erscheinen. Warum ist es seltsame Zeichen zeigt, und was kann ich die seltsamen Zeichen tun zu entfernen oder die Codierung korrekt?

***** UPDATE *****

Jon Skeet bereitgestellt, um die richtige Antwort. Die Protokolle werden zurückzukehr \ n für Neue-Zeile (nicht r \ n \) und \ 0 am Ende jeden Protokoll Linie gestreamt. Ersetzt \ n mit Environment.NewLine und \ 0 mit string.Empty und den seltsamen Zeichen sind verschwunden. Vielen Dank Jon.

War es hilfreich?

Lösung

Zum einen glaube ich, dass, wenn Textfelder immer ein Zeichen 0, erhalten sie das ist das Ende der Daten übernehmen - Sie können gegen das speziell zum Schutz wollen

.

Wo steht Ihr Byte-Strom her? Welche Codierung ist es bedeutet sein? Was sind die Bytes an diesem Punkt in den Daten?

Andere Tipps

  1. Sind Sie sicher, dass die Daten in reiner ASCII ist? Ist es vielleicht in einer der vielen, vielen Code-Seiten?
  2. Ist es vielleicht wegen der [CR] gegen [LF] gegen [CR] [LF]?
  3. Können Sie sagen, die Bytes verwenden, die rund sind „Spieler ...“? Und was erwarten Sie zu sehen? Wir könnte der Lage sein, den Code-Seite
  4. erkennen

Vermutlich das Byte entweder in Codepage Zone (128-255) oder Steuerzeichen (0-31).

Sie können sie manuell mit Zeilenumbruch Zeichen zu ersetzen, die Textbox wird verstehen, oder Sie können Ihre Textbox machen mehrzeiligen müssen, wenn es nicht schon ist.

Geekpedia sagt nur sicherstellen, dass Sie ein:

TextBox1.MultiLine = true

Nach Reaktion:

Wenn einige der Zeichen CRLF aren'r, dann müssen Sie prüfen, wie man sie fühlt.

Schauen Sie sich die tatsächliche Leistung von Encoding.ASCII.GetString() und sehen, was da drin ist.

Die, die in Ihnen Beispiel sind eindeutig Line-End-Zeichen, da sie den Header von der Datenleitung zu trennen. CRLF sollte in mehrzeiligen Textfeldern arbeiten, damit ich bin nicht sicher, was dort vor sich geht (bis Sie die Byte-Inhalte überprüfen) - die anderen Zeichen mit Leerzeichen ersetzt werden können (das ist eine Option)

.

Und ich gehe davon aus den Schriftart dieses Textfeldes festgelegt werden, nicht proportional, da sonst wird es nicht sehr gut in einer Reihe aufstellen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top