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

VB.Net如何将字节数组转换为可显示字符的字符串并写入日志?

在VB.Net中将字节数组转换为字符字符串的问题

我用TCP客户端捕获了字节列表,发送时能看到对应的字符(附Hercules截图),但写日志时遇到了问题:

我写的日志代码:

log.Debug($"Sending telegram=.... SocketPacket.Data=[{socketPacket.Data.ToString()}]")

其中socketPacket.Data的定义是:

Public Property Data() As Byte()

日志里显示的却是Sending telegram=[.... SocketPacket.Data=[System.Byte[]]],而不是预期的字符。请问怎么在VB.Net里把字节数组转换成字符形式的字符串?


解决方法

问题出在直接调用Byte[]的ToString()方法——它默认只会返回类型名称System.Byte[],不会把字节转换为对应字符。你需要根据字节数据对应的编码格式,用Encoding类的方法来转换:

  • ASCII编码(适用于0-127范围的字符):
Dim convertedStr As String = System.Text.Encoding.ASCII.GetString(socketPacket.Data)

修改后的日志代码:

log.Debug($"Sending telegram=.... SocketPacket.Data=[{convertedStr}]")
  • UTF-8编码(通用字符场景首选):
Dim convertedStr As String = System.Text.Encoding.UTF8.GetString(socketPacket.Data)
  • Unicode编码(对应UTF-16,适合双字节字符):
Dim convertedStr As String = System.Text.Encoding.Unicode.GetString(socketPacket.Data)

关键注意事项

  • 必须和发送端使用完全一致的编码格式,否则会出现乱码。比如发送端用UTF-8发送数据,你就必须用UTF-8来转换,不能用ASCII。
  • 如果字节数组包含不可打印的控制字符,转成字符串后可能显示为乱码或空白,这种情况可以考虑转成十六进制字符串记录:
Dim hexStr As String = BitConverter.ToString(socketPacket.Data)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 09:09:55