JSON解码器出错UTF-8中的解码字符串错误
问题描述:
我在Go中遇到json解码器的问题。我有通过套接字进行通信的客户端(dotnet core)和服务器(go)。编码设置为utf-8。在服务器端解码后不是正确格式的字符串之一。JSON解码器出错UTF-8中的解码字符串错误
转到解码代码:
buf := make([]byte, bufferSize)
_, err := conn.Read(buf)
if err != nil {
fmt.Println("Error reading:", err.Error())
}
s := string(buf[:])
r := strings.NewReader(s)
d := json.NewDecoder(r)
request := Request{}
d.Decode(&request)
可变小号包含正确的字符串解码之前:https://i.stack.imgur.com/EUYF3.png和ARGS包含正确的单词 “zářit”。
解码后弦破,并包含这样:https://i.stack.imgur.com/Zqan8.png
我不明白表示... + 2个从第二图像,我不知道该怎么这个字符串正确的方式进行解码。
编辑:
问题的核心可以用这个代码被复制:
package main
import (
"fmt"
"encoding/json"
"strings"
)
type Request struct {
Arg string
}
func main() {
s := "{\"Arg\": \"zářit\"}"
r := strings.NewReader(s)
d := json.NewDecoder(r)
request := Request{}
d.Decode(&request)
for i := 0; i < len(request.Arg); i++ {
char := request.Arg[i]
fmt.Print(string(char))
}
fmt.Println()
fmt.Println(request.Arg)
}
为什么输出是不一样的?我应该如何得到相同的结果?
答
main
import (
"fmt"
"encoding/json"
"strings"
)
type Request struct {
Arg string
}
func main() {
s := "{\"Arg\": \"zářit\"}"
r := strings.NewReader(s)
d := json.NewDecoder(r)
request := Request{}
d.Decode(&request)
for i := 0; i < len(request.Arg); i++ {
char := request.Arg[i]
fmt.Print(string(char))
}
//example correct show
var tmp []rune
for _, x := range request.Arg {
fmt.Printf("%x : %v : %c\n", x,x,x)
tmp = append(tmp, rune(x))
}
fmt.Printf("Result output: %v : `%s`\n", tmp, string(tmp))
fmt.Println()
fmt.Println(request.Arg)
}
输出
/usr/local/go/bin/go run /home/spouk/go/src/simple/translator
/error_json_code.go
záÅit7a : 122 : z
e1 : 225 : á
159 : 345 : ř
69 : 105 : i
74 : 116 : t
Result output: [122 225 345 105 116] : `zářit`
zářit
Process finished with exit code 0
能否请您分享'Request'的定义是什么? –
你是如何查看解码值的?如果您只是将其打印出来,它会是什么样子? – JimB
你可以请添加一个示例输入和你的struct'Request'的代码吗?或操场链接 –