VB.Net连接字符串,添加奇怪的空格

时间:2014-03-26 13:54:18

标签: regex vb.net string

我向函数发送一个结构属性,该结构属性是一个字符串(已经处理过)。它是一个IP地址。具体来说:

 Dim ipaddr As String = "192.168.2.112"

至少,这是我进行一些处理后得到的值。它在我的本地变量窗口mid build中看起来像这样,所以我知道它看起来不错。我试图为HTTP命令创建一个请求字符串。所以我像这样连接:

 Dim ReqStr As String = "http://" & ipaddr & "/cgi-bin/cmd/"

但这样做会让这些空间变得奇怪!如结果字符串

"http://192.168.2.112   /cgi-bin/cmd"

我认为生成的代码可能是非ASCII字符值,所以我把它放在" \ S +"正则表达式,或者我做了ipaddr.trimend()或.trim等。所有这些都添加了空格。当我在构建时查看当地人的ipaddr时,它会在ipaddr值的正确末尾结束。

然而,当我只是将一个硬编码字符串(" 192.168.2.112")放入字符串连接中的ipaddr位置时,没有空格。如何摆脱"秘密" ascii字符我无法看到?

修改

以下是重现问题的代码示例:

Dim bytes() As Byte = {49, 57, 50, 46, 49, 54, 56, 46, 50, 46, 49, 49, 50, 0, 0, 0}
Dim ipaddr As String = Encoding.ASCII.GetString(bytes)
Dim ReqStr As String = "http://" & ipaddr.TrimEnd() & "/cgi-bin/cmd/"

1 个答案:

答案 0 :(得分:2)

您发布的字节数组显示您的字符串中包含NUL characters,因此标准Trim不会起作用,因为这只会删除空格。

尝试使用接受字符的overloaded Trim删除空字符:

Dim ReqStr As String = "http://" & ipaddr.Trim(Convert.ToChar(0)) & "/cgi-bin/cmd/"

更好的解决方案可能是使用IPAddress类型(来自System.Net命名空间)来保存您的IP地址。这不会解决您的问题,但会将您的流氓阵列转换为地址会引发运行时错误:

Dim ip As IPAddress = Nothing
If Not IPAddress.TryParse(Encoding.ASCII.GetString(bytes), ip) Then
    'ip address is not valid
End If
Dim ReqStr As String = "http://" & ip.ToString & "/cgi-bin/cmd/"