【问题标题】:VB.Net concatenating strings, adding strange spacesVB.Net 连接字符串,添加奇怪的空格
【发布时间】:2014-03-26 13:54:18
【问题描述】:

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

 Dim ipaddr As String = "192.168.2.112"

至少,这是我们经过一些处理后得到的值。在我的局部变量窗口中间构建中看起来像这样,所以我知道它看起来不错。我正在尝试为 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/"

【问题讨论】:

  • @neel 因为这就是您在 VB.NET 中的操作方式
  • 上面的代码按预期工作,结果字符串中没有奇怪的字符。如果你得到了这个结果,那么这里还有其他东西在起作用
  • @Neel 虽然是一个不错的网站,但它几乎不是 VB.NET 的参考
  • @neel - 你应该使用 MSDN 作为官方来源。看看这个:msdn.microsoft.com/en-us/library/te2585xw.aspx
  • 调试时,请打开即时窗口并输入?System.Text.Encoding.Unicode.GetBytes(ReqStr)并回车。然后将该命令的输出复制并粘贴到您的问题中。这将有助于我们重现并更好地理解您的问题。

标签: regex vb.net string


【解决方案1】:

您发布的字节数组显示您的字符串中有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/"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-26
    • 1970-01-01
    • 1970-01-01
    • 2020-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多