这种情况不论中文英文全是乱码

�3"Jx朒(4.�~啰镛@;ui噉饵萆ww笌℃Y杸稰�庳w鏥     D晄覸V栺4c0�7l&C."欵x褜g渒�     �>E�4tQ肝!鈳hZj�欓0蹈�/斠8齦En碹柳悬么9磙_钷盩yI馈�A-T憖

显示这种乱码
这种情况很大概率是被压缩了
使用下面的代码试试

//解压缩
    var reader io.ReadCloser
    if resp.Header.Get("Content-Encoding") == "gzip" { //注意此处一定要判断,否则byte数组转换成字符串时会乱码,
        reader, err = gzip.NewReader(resp.Body)
        if err != nil {
            fmt.Println(err)
            return
        }
    }

    data, _ := ioutil.ReadAll(reader)

    fmt.Println(string(data))

只有中文乱码

解决方法1

github链接,原项目地址

安装:go get -u golang.org/x/text

resp, err := http.Get("http://xxxx")
if err != nil {
    panic(err)
}
defer resp.Body.Close()
// 判断状态码
if resp.StatusCode != http.StatusOK {
    fmt.Println("Error: status code", resp.StatusCode)
    return
}
// 下面是解码
utf8Reader := transform.NewReader(resp.Body, 
                                  simplifiedchinese.GBK.NewDecoder())
all, err := ioutil.ReadAll(utf8Reader)
if err != nil {
    panic(err)
}
fmt.Printf("%s\n", all)

解决方法2

中文乱码解决2:go get github.com/axgle/mahonia

package main
import "fmt"
import "github.com/axgle/mahonia"
func main(){
  enc:=mahonia.NewEncoder("gbk")
  //converts a  string from UTF-8 to gbk encoding.
  fmt.Println(enc.ConvertString("hello,世界"))  
}

实例

// 实例1
fi, err := os.Open("")
if err != nil {
    return
}
defer fi.Close()
decoder := mahonia.NewDecoder("gbk") // 把ANSI格式的文本用gbk进行解码。
fd, err := ioutil.ReadAll(decoder.NewReader(fi))
if err != nil {
    return
}
ds := strings.Split(string(fd), "\n")
fmt.Println("ds", ds)
func main() {
   var enc mahonia.Decoder
   enc = mahonia.NewDecoder("gbk")
   // 使用os.Open, file.Close, bufio.NewReader(), reader.ReadString读取文件的内容并显示在终端,
   file, err := os.Open("e:/test.txt")
   if err != nil {
      fmt.Println("open file err=", err)
   }
    // defer关闭 防内存泄露
   defer file.Close()

   // 创建一个带缓冲的 *Reader , 默认缓冲区4096字节
   reader := bufio.NewReader(file)

   // 带缓冲区,循环读取文件的内容
   for {
       //读到换行就结束
          str, err := reader.ReadString('\n') 
          if err == io.EOF {
             break
          }
          fmt.Println("UTF-8 to GBK:", enc.ConvertString(str))
   }
   fmt.Println("file reading end")
}

补充

下面代码来自于知乎,原文查看请点击此处

request, _ := http.NewRequest("POST","xxxxx",nil)

//请求
response, _:= new(http.Client).Do(request)
defer response.Body.Close()

//解压缩
if response.Header.Get("Content-Encoding") == "gzip" {  //注意此处一定要判断,否则byte数组转换成字符串时会乱码,
    reader, err := gzip.NewReader(response.Body)
}

data, _:= ioutil.ReadAll(reader)

fmt.Println(string(data))
分类: go

1 条评论

themida · 2022-04-09 10:22

牛啊

发表评论

Avatar placeholder

您的电子邮箱地址不会被公开。 必填项已用*标注

ICP备案号: 辽ICP备20003309号