前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >go 将获取文本转换成utf-8

go 将获取文本转换成utf-8

作者头像
solate
发布2021-08-09 15:45:35
4.2K0
发布2021-08-09 15:45:35
举报
文章被收录于专栏:solate 杂货铺solate 杂货铺

问题

比如用http.Get() 获取某个网页的编码是GBK, 但是go使用的是utf-8 , 这个时候就需要转换

代码语言:javascript
复制
func main() {
	url := "xxx网站"
	resp, err := http.Get(url)
	if err != nil {
		panic(err)
	}
	defer resp.Body.Close()

	if resp.StatusCode != http.StatusOK {
		fmt.Println("Error: status code", resp.StatusCode)
		return
	}

	all, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		panic(err)
	}

	fmt.Printf("%s \n", all)
}

解决

使用golang.org/x/text 包进行处理

方法一 直接转换

代码语言:javascript
复制
// 将收到的GBK内容转换成utf-8
utf8Reader := transform.NewReader(resp.Body, simplifiedchinese.GBK.NewDecoder())

方法二 编码推断

代码语言:javascript
复制
// 将对应格式文本转换成utf-8
func DecodeEncoding(r io.Reader) *transform.Reader {
	e := determineEncodeing(r)
	return transform.NewReader(r, e.NewDecoder())
}

// 判断传输来的文本的字符集格式是什么
func determineEncodeing(r io.Reader) encoding.Encoding {
	peek, err := bufio.NewReader(r).Peek(1024)
	if err != nil {
		panic(err)
	}
	determineEncoding, _, _ := charset.DetermineEncoding(peek, "")
	return determineEncoding
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 问题
  • 解决
    • 方法一 直接转换
      • 方法二 编码推断
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档