第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

base64 解碼然后 json 解碼:base64.NewDecoder EOF 錯(cuò)誤和 json

base64 解碼然后 json 解碼:base64.NewDecoder EOF 錯(cuò)誤和 json

Go
楊魅力 2023-04-24 16:32:59
我正在嘗試 base64 解碼 HTTP 請(qǐng)求,然后使用 JSON 解碼器對(duì)其進(jìn)行解碼。我嘗試了兩種實(shí)現(xiàn)base64解碼器的方法:func decode(encoded []byte) ([]byte, error) {    buff := new(bytes.Buffer)    decoder := base64.NewDecoder(base64.StdEncoding, buff)    _, err := decoder.Read(encoded)    return buff.Bytes(), err}此函數(shù)返回 EOF 錯(cuò)誤。去游樂場(chǎng)鏈接:https://play.golang.org/p/038rEXWYW6qfunc decode(encoded []byte) ([]byte, error) {    decoded := make([]byte, base64.StdEncoding.EncodedLen(len(encoded)))    _, err := base64.StdEncoding.Decode(decoded, encoded)    return decoded, err}這可行,但有額外的x\00字符,因此在解碼 JSON 時(shí)我們會(huì)出錯(cuò)invalid character '\x00' after top-level value。第一種策略的問題在哪里?去編碼base64
查看完整描述

1 回答

?
泛舟湖上清波郎朗

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超3個(gè)贊

在你的代碼中:


您正在創(chuàng)建一個(gè)新緩沖區(qū)并將其分配給buff,因?yàn)槟鷽]有為其提供任何輸入源,所以它是空的。


buff := new(bytes.Buffer)

并且NewDecoder正在從空讀取buff。就像 go 中的所有東西一樣,如果你想創(chuàng)建一個(gè)新的東西,你應(yīng)該使用它的構(gòu)造函數(shù),它總是以package.Newxxx


bytes.NewBuffer(src)

然后decoder是一個(gè)包含實(shí)際解碼數(shù)據(jù)的變量,它有一個(gè)reader interface(讀取方法)。reader interface因此,您可以將它傳遞給接受, 并且ioutil.ReadAll()是其中之一的方法。


在必要時(shí)添加評(píng)論:


package main


import (

    "bytes"

    "encoding/base64"

    "fmt"

    "io/ioutil"

    "log"

)


// encoded data

var data = "eyJhY3Rpdml0aWVzIjpbXSwic3VjY2VzcyI6ZmFsc2UsImNvZGUiOjk5OTl9"


func main() {

    dec, err := decode([]byte(data))

    if err != nil {

        log.Println(err)

    }

    fmt.Println(string(dec)) // print returned value

}


func decode(enc []byte) ([]byte, error) {

    // create new buffer from enc

    // you can also use bytes.NewBuffer(enc)

    r := bytes.NewReader(enc)

    // pass it to NewDecoder so that it can read data

    dec := base64.NewDecoder(base64.StdEncoding, r)

    // read decoded data from dec to res

    res, err := ioutil.ReadAll(dec)

    return res, err

}

事實(shí)上,整個(gè)事情可以寫在一行中:


func decode(enc []byte) ([]byte, error) {

    return ioutil.ReadAll(base64.NewDecoder(base64.StdEncoding, bytes.NewReader(enc)))

}

輸出:


{"activities":[],"success":false,"code":9999}


查看完整回答
反對(duì) 回復(fù) 2023-04-24
  • 1 回答
  • 0 關(guān)注
  • 255 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)