从字节流返回奇怪的字符?
-
21-08-2019 - |
题
当尝试在文本框中显示来自 HLDS(半条命专用服务器)的字节流时,它会显示奇怪的块状问号字符,如下所示:
[?]
这是字节流中的示例行(用 [?] 代替奇怪的字符):
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 *****
乔恩·斯基特提供了正确的答案。日志在每个日志行流式传输的末尾返回 换行符(而不是 )和 \0。将 替换为 Environment.NewLine,将 \0 替换为 string.Empty,奇怪的字符就消失了。谢谢乔恩。
解决方案
首先,我认为,如果文本框曾经收到一个字符0,他们会认为这是数据的结尾 - 你可能要警惕的是专门
。在哪里您的字节流从何而来?什么编码是它的意味着的是?什么是在数据点?
的字节其他提示
- 您确定数据是纯 ASCII 格式吗?它可能在众多代码页之一中吗?
- 可能是因为[CR] vs [LF] vs [CR][LF]?
- 你能说出使用“玩家...”周围的字节吗?您期望看到什么?我们 可能 能够识别代码页
据推测,该字节位于代码页区域 (128-255) 或控制字符 (0-31) 中。
您可能必须与断行字符的文本框就会明白手动替换它们,或者您可能需要让你的文本框的多行,如果它是不是已经。
TextBox1.MultiLine = true
响应之后:
如果某些字符aren'r CRLF,那么你需要检查你是如何得到它们。
看从Encoding.ASCII.GetString()
实际输出的,看看里面有什么了。
在你示例的那些显然线端字符,因为它们从数据线分离的报头。 CRLF应该多文本框工作,所以我不知道发生了什么事情在那里(直到您验证该字节的内容) - 其它字符可以用空格(这是一个选项)
替换和,我假定该文本框的字体将被固定,而不是成比例的,因为否则将不排队很好。
不隶属于 StackOverflow