这种情况不论中文英文全是乱码
�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
安装: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))
1 条评论
themida · 2022-04-09 10:22
牛啊
评论已关闭。