如何从字符串中删除空字符(零字符)

时间:2014-05-16 05:26:49

标签: vb.net unicode character-encoding ascii null-character

我一直试图从字符串中删除所有零字符

我的字符串由这些十六进制字节组成

  

00 44 00 65 00 6C 00 70 00 68 00 69

对于每个字母,前面都有一个零字节(空字节)..我猜我必须使用某种Unicode编码或宽编码来获取没有那些零的文本。

但我无法理解,所以我认为最好的方法是使用替换,但即便失败。

Dim packet() As String = {&H0, &H44, &H0, &H65, &H0, &H6C, &H0, &H70, &H0, &H68, &H0, &H69}
Dim str As String = Encoding.ASCII.GetString(packet, 0, 12)
str = str.Replace("\0", "")  'Compiles and fails
str = str.Replace(\0, "")  'No compile
str = str.Replace('\0', "")  'No compile

3 个答案:

答案 0 :(得分:5)

如果您想要的东西不依赖于Microsoft.Visualbasic命名空间:

str = str.Replace(Convert.ToChar(0),"")

唯一的选择是使用String.Replace我能想到的是使用正则表达式替换:http://msdn.microsoft.com/en-us/library/844skk0h(v=vs.110).aspx

答案 1 :(得分:4)

真正的问题不是空字节,而是首先解码字节ÍntoString。您使用的是错误的Encoding。您应该使用Encoding.BigEndianUnicode而不是Encoding.ASCII,然后您不需要手动替换空值,因为解码过程将为您处理它们:

Dim packet() As Byte = {&H0, &H44, &H0, &H65, &H0, &H6C, &H0, &H70, &H0, &H68, &H0, &H69}
Dim str As String = Encoding.BigEndianUnicode.GetString(packet)

答案 2 :(得分:3)

解决了它

 str = str.Replace(vbNullChar, "")

还在寻找一种方法来实现这一功能,内置函数不依赖于Replace函数