我的问题是:
在代码中name := base58.Decode(group.Name)增加这一行,json_iterator.Marshal(group)这个函数就运行下去了,但是 json.Marshal(group)是可以的,是为什么,我的程序中就碰到了类似这样的事情,其中并没有对请求过来的数据进行过编解码的操作,可是打印出来的数据变成了乱码类似这样“\ufffd\ufffd\ufffd”的,然后进行json序列化时程序就会卡住,想知道这是什么原因还有解决办法是什么?
package main
import (
"encoding/json"
"fmt"
"os"
"github.com/btcsuite/btcutil/base58"
"github.com/json-iterator/go"
)
func main() {
type ColorGroup struct {
ID int
Name string
Colors []string
}
group := ColorGroup{
ID: 1,
Name: "AB2SSDF",
Colors: []string{"Crimson", "Red", "Ruby", "Maroon"},
}
name := base58.Decode(group.Name) //这里进行一个base58解码后,Name字段就会变成乱码,如果name字符串中含有数字,json_iterator.Marshal函数就进行不下去了,想问一下这是什么原因,要怎么解决
fmt.Println("name",string(name))
group.Name = string(name)
b, err := json.Marshal(group)
if err != nil {
fmt.Println("error:", err)
}
os.Stdout.Write(b)
fmt.Println("\n")
var json_iterator = jsoniter.ConfigCompatibleWithStandardLibrary
b, err = json_iterator.Marshal(group)
os.Stdout.Write(b)
fmt.Println("\n")
}
marshal失败没关系,我只是奇怪b, err := json.Marshal(group)这个是不会导致程序出问题的,但是b, err = json_iterator.Marshal(group)这个就有问题了,导致程序卡死接收不到任何信息,但是却并没有死掉。
#4
更多评论
你原来的字符串本身就不是base58编码的,你硬要base58解码,你说会不会乱码?
group.Name = base58.Encode([]byte("xxxxxxxx"))
这样测试一下就对了
#1