golang爬取gbk页面中文乱码解决方案

作者:zarte    发布时间: 2021-04-24

爬虫编码golanggbk

问题

在编写爬虫程序时,会碰见编码格式非utf8的编码,go默认支持的是utf8,如果不进行处理就会出现乱码。例如
2021年上海国际包装展上海包装机械展食品
在控制台显示会变成
2021���Ϻ����ʰ�װչ�Ϻ���װ��еչʳƷ

解决方案

第一种,网上搜到的大部分都是使用github.com/axgle/mahonia 这个包对字符串进行编码转换。但是经实际使用测试发现并不符合所有场景,例如 这个符号转换后还是乱码,中文引号"会导致一大堆文字乱码。
下载包 go get github.com/axgle/mahonia 代码示例如下:

//转换函数
func ConvertToString(src string, srcCode string, tagCode string) string {       
srcCoder := mahonia.NewDecoder(srcCode)       
srcResult := srcCoder.ConvertString(src)      
tagCoder := mahonia.NewDecoder(tagCode)      
_, cdata, _ := tagCoder.Translate([]byte(srcResult), true)       
result := string(cdata)       
return result
}
//需要的地方调用
result = ConvertToString(html, "gbk", "utf-8")

第二种:正确的解决方案是在读取http返回的内容时就设定读取的编码。使用charset.NewReade()示例代码如下

client := http.Client{}
resp, err := client.Do(request)
r, _ := charset.NewReader(resp.Body, chartset)
respBytes, err := ioutil.ReadAll(r)

这样获取到的内容编码就是设定好的编码了

上一篇:  php date日期格式化参数列表

下一篇:  iis站点 Session值不规律变化

加载更多