go http请求返回的不是中文?

package main

import (
    "bytes"
    "fmt"
    "io"
    "net/http"
    "net/url"
    "unicode/utf8"
)

func post(reqUrl string, headers map[string]string, reqProxy string) (string, error) {
    var client http.Client
    if reqProxy != "" {
        proxy, err := url.Parse(reqProxy)
        if err != nil {
            return "Parse req_proxy fail", err
        }
        client = http.Client{
            Timeout: 5 * client.Timeout,
            Transport: &http.Transport{
                Proxy: http.ProxyURL(proxy),
            },
        }
    } else {
        client = http.Client{
            Timeout: 5 * client.Timeout,
        }
    }
    // map[type]type
    data := "{\"personname\":\"张三\",\"age\":18,\"high\":182,\"sex\":\"男\",\"class\":{\"classname\":\"1班\",\"grade\":3,\"tt\":{\"a\":\"b\"}},\"message\":\"测试成功!\"}"
    req, err := http.NewRequest("POST", reqUrl, bytes.NewReader([]byte(data)))
    if err != nil {
        return "", err
    }
    for key, value := range headers {
        req.Header.Set(key, value)
    }
    resp, err := client.Do(req)
    if err != nil {
        return "", err
    }
    body, err := io.ReadAll(resp.Body)
    if err != nil {
        return "", err
    }
    fmt.Println(body)
    response := string(body)
    return response, nil
}

func request(reqUrl string, headers map[string]string, reqProxy string) (string, error) {
    var client http.Client
    if reqProxy != "" {
        proxy, err := url.Parse(reqProxy)
        if err != nil {
            return "Parse req_proxy fail", err
        }
        client = http.Client{
            Timeout: 5 * client.Timeout,
            Transport: &http.Transport{
                Proxy: http.ProxyURL(proxy),
            },
        }
    } else {
        client = http.Client{
            Timeout: 5 * client.Timeout,
        }
    }
    req, err := http.NewRequest("GET", reqUrl, nil)
    if err != nil {
        return "", err
    }
    for key, value := range headers {
        req.Header.Set(key, value)
    }
    resp, err := client.Do(req)
    if err != nil {
        return "", err
    }
    body, err := io.ReadAll(resp.Body)
    if err != nil {
        return "", err
    }
    fmt.Println(utf8.FullRune(body))
    response := string(body)
    return response, nil
}
func main() {
    headers := map[string]string{
        "user-agent": "test",
    }
    content, _ := post("http://httpbin.org/post", headers, "")
    fmt.Println(content)

}

返回的content里面中文是Unicode的形式的 怎么才能输出中文形式的呢

阅读 1.4k
1 个回答
新手上路,请多包涵
import "golang.org/x/text/encoding/simplifiedchinese"

func ConvertStr2GBK(str string) string {
    //将utf-8编码的字符串转换为GBK编码
    ret, err := simplifiedchinese.GBK.NewEncoder().String(str)
    return ret   //如果转换失败返回空字符串

    //如果是[]byte格式的字符串,可以使用Bytes方法
    b, err := simplifiedchinese.GBK.NewEncoder().Bytes([]byte(str))
    return string(b)
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题