抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

起因

最近在开发lit-edu-go这个项目的时候, 遇到了返回的网页是gb2312的编码的问题

解决方案

iconv-go

1
2
3
4
5
6
7
8
9
10
11
import (
iconv "github.com/djimenez/iconv-go"
)

...
utf8Body, err := iconv.NewReader(res.Body, "gb2312", "utf-8")
if err != nil {
log.Println(err)
}
...

但是这个库依赖于 libiconvwindows 以及交叉编译不友好

mahonia

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import (
"github.com/axgle/mahonia"
)

// gb18030Tutf8 手动写个函数方便转换
// gbk gb2312 等等中文编码都可以当做 gb18030 进行转换
func gb18030Tutf8(s string) string {
src := mahonia.NewDecoder("gb18030")
res := src.ConvertString(s)
tag := mahonia.NewDecoder("utf-8")

_, cdata, err := tag.Translate([]byte(res), true)
if err != nil {
return ""
}

result := string(cdata)

return result
}

推荐这种方式, 虽然只支持 string 类型的转换, 但不用使用 cgo 了, 鲁棒性也强啦

评论