[英]JSON decoder in Go wrong decoding string in UTF-8
我在Go中遇到json解碼器問題。 我有通過套接字進行通信的客戶端(dotnet核心)和服務器(go)。 編碼設置為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)
變量s在解碼之前包含正確的字符串: 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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.