Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 在Go中执行http请求时字符串被篡改_String_Http_Go - Fatal编程技术网

String 在Go中执行http请求时字符串被篡改

String 在Go中执行http请求时字符串被篡改,string,http,go,String,Http,Go,我在Go中do Get请求时遇到了一个乱码问题,代码是: req , err:= http.NewRequest(httpMethod, url,strings.NewReader("")) req.Header.Add("Accept","application/json") resp, err := http.DefaultClient.Do(req) body,err := ioutil.ReadAll(resp.Body) ret := string(body) log.Warningf

我在Go中do Get请求时遇到了一个乱码问题,代码是:

req , err:= http.NewRequest(httpMethod, url,strings.NewReader(""))
req.Header.Add("Accept","application/json")
resp, err := http.DefaultClient.Do(req)
body,err := ioutil.ReadAll(resp.Body)
ret := string(body)
log.Warningf("ret: %+v", ret)

如果ret只包含英文,那么它是正确的,如果包含中文,那么它有乱码字符串,如何解决这个问题,谢谢大家

Go字符串可以包含任何类型的字符,但在打印它们时,字符被解释为utf-8

您可以尝试添加:

req.Header.Add("Accept-Charset","utf-8")
如果这不起作用,您可以尝试使用此包将其从任何字符集转换为utf-8:

字符集取决于您请求的页面。如果是html,则在响应头中有时会这样指定字符集:

Content-Type: text/html; charset=utf-8

因此,您需要弄清楚字符集是什么。

Go字符串可以容纳任何类型的字符,但在打印它们时,字符被解释为utf-8

您可以尝试添加:

req.Header.Add("Accept-Charset","utf-8")
如果这不起作用,您可以尝试使用此包将其从任何字符集转换为utf-8:

字符集取决于您请求的页面。如果是html,则在响应头中有时会这样指定字符集:

Content-Type: text/html; charset=utf-8

因此,您需要弄清楚字符集是什么。

在我的案例中,网站没有在内容类型中使用字符集进行响应,也没有使用请求的字符集进行响应:req.Header.AddAccept-charset,utf-8

我用visualstudio代码打开了这个文件,并一直在切换编码,以找出哪一个最适合用编码重新打开

一旦我弄清楚它是哪种编码,我就简单地使用了这个函数:

dec := charmap.Windows1250.NewDecoder()
output, _ := dec.Bytes(body)
发件人:golang.org/x/text/encoding/charmap

完整代码示例:

package main

import (
    "fmt"
    "net/http"
    "io/ioutil"
    "golang.org/x/text/encoding/charmap"
)

func main() {

    client := &http.Client{}

    req, err := http.NewRequest("GET", "example.com", nil)

    if err != nil {
        fmt.Println(err)
        return
    }

    resp, err := client.Do(req)

    if err != nil {
        fmt.Println(err)
        return
    }

    defer resp.Body.Close()

    body, err := ioutil.ReadAll(resp.Body)

    if err != nil {
        fmt.Println(err)
        return
    }

    dec := charmap.Windows1250.NewDecoder()

    output, err:= dec.Bytes(body)

    if err != nil {
        fmt.Println(err)
        return
    }

    // do something with output

}

在我的例子中,网站没有使用内容类型中的字符集进行响应,也没有使用请求的:req.Header.AddAccept-charset,utf-8进行响应

我用visualstudio代码打开了这个文件,并一直在切换编码,以找出哪一个最适合用编码重新打开

一旦我弄清楚它是哪种编码,我就简单地使用了这个函数:

dec := charmap.Windows1250.NewDecoder()
output, _ := dec.Bytes(body)
发件人:golang.org/x/text/encoding/charmap

完整代码示例:

package main

import (
    "fmt"
    "net/http"
    "io/ioutil"
    "golang.org/x/text/encoding/charmap"
)

func main() {

    client := &http.Client{}

    req, err := http.NewRequest("GET", "example.com", nil)

    if err != nil {
        fmt.Println(err)
        return
    }

    resp, err := client.Do(req)

    if err != nil {
        fmt.Println(err)
        return
    }

    defer resp.Body.Close()

    body, err := ioutil.ReadAll(resp.Body)

    if err != nil {
        fmt.Println(err)
        return
    }

    dec := charmap.Windows1250.NewDecoder()

    output, err:= dec.Bytes(body)

    if err != nil {
        fmt.Println(err)
        return
    }

    // do something with output

}

我在visual studio上找不到“使用编码重新打开”选项,您能告诉我它在哪里吗?右下角有一个显示当前编码的标签。单击标签后,例如,顶部的UTF-8出现选项,如果文件已保存,则使用编码重新打开。我在visual studio上找不到“使用编码重新打开”选项,您能告诉我它在哪里吗?右下角有一个显示当前编码的标签。单击标签后,例如,顶部的UTF-8出现选项,如果文件已保存,则使用编码重新打开。