Vb.net 如何从字符串中删除空字符(零字符)
我一直试图从字符串中删除所有零字符 我的字符串是由这些十六进制字节组成的 00 44 00 65 00 6C 00 70 00 68 00 69 每个字母前面都有一个零字节(空字节)。。我猜我必须使用某种Unicode编码或广域编码来获得没有零的文本 但我想不出来,所以我想最好的办法是使用替换,但即使这样也失败了Vb.net 如何从字符串中删除空字符(零字符),vb.net,unicode,character-encoding,ascii,null-character,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,
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
解决了
str = str.Replace(vbNullChar, "")
如果您想要不依赖Microsoft的功能,仍在寻找一种不依赖于
Replace
函数的内置函数的方法。Visualbasic命名空间:
str = str.Replace(Convert.ToChar(0),"")
唯一的替代方法是使用String.Replace,我能想到的是使用regex Replace:真正的问题不是空字节,而是如何首先将字节解码为
字符串。您使用了错误的编码。您应该使用而不是编码.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)
或者干脆str=str.Replace(Char.MinValue,”)
这是错误的答案。它是一个帮助解决症状的创可贴,而不是修复根本原因——错误的<代码>编码< /代码>被用来将字节转换成<代码>字符串< /代码>。修复编码,不再需要替换。失败的原因是VB不使用/识别字符串中的转义字符。这显然是为了避免类似“C:\\MyTemp\\SomeFile.Ext”的事情。完美我知道它是unicode,但我不知道为什么它不起作用。就是这个yup@SSpoke在Microsoft.NET基类库(以及Microsoft的大部分工作)中,“Unicode”不仅指字符集,而且(深奥地)指Unicode字符集的UTF-16编码。里米指出,UTF 16有一个字节顺序,你需要考虑。(相比之下,Unicode还有其他编码。UTF-8非常流行,事实上,它是.NET文件流的默认编码。)特别是,Microsoft在任何地方都使用UTF-16 Little Endian(编码.Unicode
使用的是什么)。但是有些协议/平台使用bigendian代替,这就是为什么编码。bigendianicode
也被提供。如果不是“内置”的,“替换”是什么?替换是内置的Visual Basic.NET edition任何您只需键入
点的字符串,它会显示您可以使用的可能命令列表。是的,在VisualBasic6中,您只需使用内置的Replace(str,“Hi”,“Bye”)
。哈哈,我想读我自己的答案。是的,我搞砸了。在我看来,仅仅使用诸如Replace
之类的函数就像是一个快速解决方案,而不是一个可靠的解决方案。这就像在需要使用正则表达式时依赖Replace
。或者在需要构建完整的Fletch HTML解析器时使用正则表达式。