You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#:如何在TextBox中显示UDP接收字符串中的全部字符(含乱码)

解决UDP摄像头数据在TextBox显示不全的问题

可能的原因

  • 摄像头UDP数据包包含不可见的ASCII控制字符(如空字符\0、垂直制表符等),TextBox渲染时遇到这类字符会中断后续内容的显示。
  • 直接使用Encoding.ASCII.GetString转换字节数组可能不匹配摄像头的实际编码,导致部分字符解析异常或显示中断。

解决方案

1. 过滤控制字符

在将字符串添加到列表前,过滤掉所有不可见的控制字符,只保留可打印字符:

List<string> responses = new List<string>();

byte[] bytesRead = client.Receive(ref receiverEndPoint);
string rawStr = Encoding.ASCII.GetString(bytesRead);
// 过滤控制字符,只保留可打印内容
string cleanStr = new string(rawStr.Where(c => !char.IsControl(c)).ToArray());
responses.Add(cleanStr);

2. 匹配摄像头的实际编码

国产IP摄像头常用GBK/GB2312编码,替换ASCII编码尝试:

List<string> responses = new List<string>();

byte[] bytesRead = client.Receive(ref receiverEndPoint);
// 替换为GBK编码(可根据摄像头说明书调整)
string rawStr = Encoding.GetEncoding("GBK").GetString(bytesRead);
string cleanStr = new string(rawStr.Where(c => !char.IsControl(c)).ToArray());
responses.Add(cleanStr);

3. 优化TextBox更新逻辑

避免多次拼接字符串(低效且易出问题),改用StringBuilder统一拼接后赋值:

StringBuilder sb = new StringBuilder();
foreach (var str in responses)
{
    sb.AppendLine("\n" + str);
}
tbResult.Text = sb.ToString();

验证步骤

调试时可先将处理后的cleanStr输出到控制台,确认内容完整后再赋值给TextBox,排查是否是控制字符导致的显示截断。

内容的提问来源于stack exchange,提问作者Raize Ahamed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 21:04:58