0

HLDS(Half-Life Dedicated Server)からのバイトストリームをテキストボックスに表示しようとすると、次のような奇妙なブロック状の疑問符文字が表示されます。

[?]

これがバイトストリームからのサンプル行です(奇妙な文字の代わりに[?]が付いています):

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

バイトストリームを文字列として表示する方法は次のとおりです。

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

文字は[CR][LF]通常表示されるはずの場所に表示されます。なぜ奇妙な文字が表示されるのですか?奇妙な文字を削除したり、エンコーディングを修正したりするにはどうすればよいですか?

***** UPDATE *****

ジョンスキートは正しい答えを提供しました。ログは、改行(\ r \ nではなく)に対して\ nを返し、ストリーミングされた各ログ行の最後に\0を返します。\ nをEnvironment.NewLineに、\0をstring.Emptyに置き換えました。奇妙な文字はなくなりました。ジョンありがとう。

4

3 に答える 3

1
  1. データが純粋な ASCII であることを確認しますか? おそらく、非常に多くのコードページの1つにあるのでしょうか?
  2. おそらく[CR]対[LF]対[CR][LF]のせいでしょうか?
  3. 「Players...」の周りにあるバイトを使用していると言えますか? そして、あなたは何を見ることを期待していますか?コードページを認識できるかもしれません

おそらく、バイトはコードページ ゾーン (128 ~ 255) または制御文字 (0 ~ 31) のいずれかにあります。

于 2009-02-06T07:56:39.037 に答える
1

テキストボックスが理解できる改行文字に手動で置き換えるか、テキストボックスを複数行にする必要がある場合があります。

Geekpediaは、設定を確認するように言っています:

TextBox1.MultiLine = true

応答後:

一部の文字が CRLF でない場合は、それらの取得方法を調べる必要があります。

からの実際の出力をEncoding.ASCII.GetString()見て、そこにあるものを確認してください。

あなたの例のものは、ヘッダーをデータ行から分離するため、明らかに行末文字です。CRLFは複数行のテキストボックスで機能するはずなので、何が起こっているのかわかりません(バイトの内容を確認するまで)-他の文字はスペースに置き換えることができます(これが1つのオプションです)。

また、このテキスト ボックスのフォントは比例ではなく固定されると想定しています。

于 2009-02-06T07:57:40.220 に答える
1

まず、テキストボックスが文字 0 を受け取った場合、それがデータの終わりであると見なされると思います。具体的には、それを防ぐ必要があるかもしれません。

あなたのバイトストリームはどこから来るのですか? どのようなエンコーディングを意図していますか? データのその時点でのバイト数は?

于 2009-02-06T08:08:14.613 に答える