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
相关产品推荐
相关产品推荐

