Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 如何从字符串中删除空字符(零字符)_Vb.net_Unicode_Character Encoding_Ascii_Null Character - Fatal编程技术网

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

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,

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

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

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
解决了

 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解析器时使用正则表达式。