我的问题是:
在代码中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")
}
<a href="/user/mlzhou" title="@mlzhou">@mlzhou</a> 是啊,又不想用json.Marshal,但是一旦传过来的数据有问题json_iterator.Marshal又解决不了导致程序卡死。
#6
更多评论
你原来的字符串本身就不是base58编码的,你硬要base58解码,你说会不会乱码?
group.Name = base58.Encode([]byte("xxxxxxxx"))
这样测试一下就对了
#1