无法从字节数组中删除Null终结符?

时间:2018-06-03 19:52:28

标签: go

我在Go(在OSX上)使用this library与Windows DNS服务器进行交互。

运行以下代码段时,我收到有关空终止符的错误。

 $ ~/go/bin/winrm-dns-client create -d domain.com -n node-0 -t A -v 10.90.61.30
2018/06/03 12:40:22 Error creating DNS record: Reading record: Reading record: Unmarshalling response: Unmarshalling json: invalid character '\x00' after array element

我怀疑当辅助方法调用sprintf将json响应连接到数组时,有一个空终结符添加here

然而,即使添加了如下所示的bytes.Trim之后......我仍然会得到一个空终止符错误,似乎空终止符仍然存在...

func unmarshalResponse(resp string) ([]interface{}, error) {
    var data interface{}
    byteRespTrim := []byte(resp)
    fmt.Print("found a null terminator at -- ")
    fmt.Println(bytes.Index(byteRespTrim, []byte("\x00")))
    fmt.Print("total length = ")
    fmt.Println(len(byteRespTrim))
    byteRespTrim = bytes.Trim(byteRespTrim, "\x00")
    fmt.Print("after trim found a null terminator at -- ")
    loc := bytes.Index(byteRespTrim, []byte("\x00"))
    fmt.Print(loc)

打电话时我得到以下

(master)⚡ % ./windows-dns-test create -d domain.com -n openshift-node-0 -t A -v 10.90.61.30                       
found a null terminator at -- 2102
total length = 2615
after trim found a null terminator at -- 2102

1 个答案:

答案 0 :(得分:0)

从您的日志中,可能会在2615位置找到有问题的字符,而整个数组都有Trim元素。

所以看起来Replace不会解决它,因为问题不一定是数组的最终字符。

您是否尝试使用byteRespTrim = bytes.Replace(byteRespTrim, []byte("\x00"), []byte{}, -1) 删除所有实例?

{{1}}