如何在 UTF-8 中正确编码 HTTP 响应字节?
How to encode HTTP response bytes in UTF-8 correctly?
使用 http
包发出 HTTP 请求后,我正在读取响应:
resp, _ := client.Do(request)
defer resp.Body.Close()
responseBody, _ := ioutil.ReadAll(resp.Body)
log.Println("body", string(responseBody))
响应是 JSON 格式,包含俄语字符,所以我在控制台看到了
{"error_code":201,"error_name":"\u041f\u043e\u043b ... "}
如何解码响应字节以便看到可读消息?
JSON Go 中的解码器可以处理编码符号,你需要在结构或其他值中解组有效载荷:
https://play.golang.org/p/Mt-phU4kxfy
package main
import (
"encoding/json"
"fmt"
)
func main() {
payload := []byte(`{"error_code":201,"error_name":"\u041f\u043e\u043b ... "}`)
var p interface{}
_ = json.Unmarshal(payload, &p)
fmt.Printf("%#v\n", p) // map[string]interface {}{"error_code":201, "error_name":"Пол ... "}
var e struct {
ErrorCode int `json:"error_code"`
ErrorName string `json:"error_name"`
}
_ = json.Unmarshal(payload, &e)
fmt.Println(e.ErrorCode, e.ErrorName) // 201 Пол ...
}
使用 http
包发出 HTTP 请求后,我正在读取响应:
resp, _ := client.Do(request)
defer resp.Body.Close()
responseBody, _ := ioutil.ReadAll(resp.Body)
log.Println("body", string(responseBody))
响应是 JSON 格式,包含俄语字符,所以我在控制台看到了
{"error_code":201,"error_name":"\u041f\u043e\u043b ... "}
如何解码响应字节以便看到可读消息?
JSON Go 中的解码器可以处理编码符号,你需要在结构或其他值中解组有效载荷:
https://play.golang.org/p/Mt-phU4kxfy
package main
import (
"encoding/json"
"fmt"
)
func main() {
payload := []byte(`{"error_code":201,"error_name":"\u041f\u043e\u043b ... "}`)
var p interface{}
_ = json.Unmarshal(payload, &p)
fmt.Printf("%#v\n", p) // map[string]interface {}{"error_code":201, "error_name":"Пол ... "}
var e struct {
ErrorCode int `json:"error_code"`
ErrorName string `json:"error_name"`
}
_ = json.Unmarshal(payload, &e)
fmt.Println(e.ErrorCode, e.ErrorName) // 201 Пол ...
}