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

UDP端口接收文本在RichTextBox显示乱码问题求助(附C#代码)

解决UDP接收文本乱码问题

看起来你遇到了UDP传输中编码不匹配导致的乱码问题,这在网络通信里是很常见的情况,我来帮你搞定它!

问题原因

你当前使用Encoding.Default.GetString(bytes)来解析UDP接收到的字节流,但Encoding.Default是依赖系统环境的默认编码(比如Windows下可能是GB2312,其他系统可能是不同的编码)。如果发送端使用的是另一种编码(比如最常用的UTF-8),就会出现解析后的文本乱码,像你遇到的“Hi”变成“b¬ю”就是典型的编码不匹配表现。

解决方案

要解决这个问题,核心是保证发送端和接收端使用完全一致的编码格式,推荐使用通用的UTF-8编码(跨平台兼容性最好),具体修改如下:

  1. 确认发送端的编码:如果发送端也是.NET程序,检查它发送数据时用的编码,比如是否是Encoding.UTF8.GetBytes("Hi");如果是其他语言编写的发送端,也要确认它的编码格式。
  2. 修改接收端的编码解析代码:将Encoding.Default替换为对应的编码,比如UTF-8:

修改后的完整代码片段:

private void Chat(object sender, EventArgs e) 
{ 
    alive = true; 
    try 
    { 
        while (alive) 
        { 
            IPEndPoint groupEP = new IPEndPoint(IPAddress.Any, Port); 
            byte[] bytes = client.Receive(ref groupEP); 
            // 这里把Encoding.Default改成Encoding.UTF8,和发送端保持一致
            string message = Encoding.UTF8.GetString(bytes); 
            string time = DateTime.Now.ToShortTimeString(); 
            Invoke(new MethodInvoker(() => { MB.AppendText("\r\n" + time + " " + message); })); 
        } 
    } 
    catch (ObjectDisposedException) 
    { 
        if (!alive) return; 
        throw; 
    } 
    catch (Exception ex) 
    { 
        MessageBox.Show(ex.Message); 
    } 
}

额外建议

  • 如果不确定发送端的编码,可以尝试几种常见编码(UTF-8、ASCII、Unicode)来测试,找到能正确解析的那个。
  • 网络通信中,最好和发送端约定好固定的编码格式,避免因环境差异导致的乱码问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:11:07