亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何解壓縮 gzip 格式的 []byte 內容,在解組時出現錯誤

如何解壓縮 gzip 格式的 []byte 內容,在解組時出現錯誤

Go
慕妹3146593 2021-06-30 13:39:36
我正在向一個 API 發出請求,我得到了一個[]byte響應 ( ioutil.ReadAll(resp.Body))。我正在嘗試解組此內容,但似乎未以 utf-8 格式編碼,因為解組返回錯誤。我正在嘗試這樣做:package mainimport (    "encoding/json"    "fmt"    "some/api")func main() {    content := api.SomeAPI.SomeRequest() // []byte variable    var data interface{}    err := json.Unmarshal(content, &data)    if err != nil {        panic(err.Error())    }    fmt.Println("Data from response", data)}我得到的錯誤是invalid character '\x1f' looking for beginning of value. 作為記錄,響應在標頭中包含Content-Type:[application/json; charset=utf-8].解組時如何解碼content以避免這些無效字符?編輯這是 hexdump 的content:play.golang.org/p/oJ5mqERAmj
查看完整描述

1 回答

?
拉風的咖菲貓

TA貢獻1995條經驗 獲得超2個贊

根據您的十六進制轉儲判斷您正在接收 gzip 編碼的數據,因此您需要先使用compress/gzip 對其進行解碼。


嘗試這樣的事情


package main


import (

    "bytes"

    "compress/gzip"

    "encoding/json"

    "fmt"

    "io"

    "some/api"

)


func main() {

    content := api.SomeAPI.SomeRequest() // []byte variable


    // decompress the content into an io.Reader

    buf := bytes.NewBuffer(content)

    reader, err := gzip.NewReader(buf)

    if err != nil {

        panic(err)

    }


    // Use the stream interface to decode json from the io.Reader

    var data interface{}

    dec := json.NewDecoder(reader)

    err = dec.Decode(&data)

    if err != nil && err != io.EOF {

        panic(err)

    }

    fmt.Println("Data from response", data)

}

以前的


字符\x1f是 ASCII 和 UTF-8 中的單位分隔符。它永遠不是 UTF-8 編碼的一部分,但可用于標記文本的不同位。\x1f據我所知,一個字符串可以是有效的 UTF-8,但不是有效的 json。


我認為您需要仔細閱讀 API 規范以了解他們使用\x1f標記的目的,但同時您可以嘗試刪除它們并查看會發生什么,例如


import (

    "bytes"

    "fmt"

)


func main() {

    b := []byte("hello\x1fGoodbye")

    fmt.Printf("b was %q\n", b)

    b = bytes.Replace(b, []byte{0x1f}, []byte{' '}, -1)

    fmt.Printf("b is now %q\n", b)

}

印刷


b was "hello\x1fGoodbye"

b is now "hello Goodbye"


查看完整回答
反對 回復 2021-07-05
  • 1 回答
  • 0 關注
  • 295 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號