专栏首页solate 杂货铺go 将获取文本转换成utf-8

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

问题

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

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 包进行处理

方法一 直接转换

// 将收到的GBK内容转换成utf-8
utf8Reader := transform.NewReader(resp.Body, simplifiedchinese.GBK.NewDecoder())

方法二 编码推断

// 将对应格式文本转换成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
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Go 语言基础入门教程 —— 数据类型篇:字符串和字符类型

    在 Go 语言中,字符串是一种基本类型,默认是通过 UTF-8 编码的字符序列,当字符为 ASCII 码时则占用 1 个字节,其它字符根据需要占用 2-4 个字...

    学院君
  • go语言基本类型

    这篇文章主要介绍了GO语言基本类型,较为详细的分析了整形、浮点型、字符串、指针等类型的具体用法,是深入学习GO语言所必须掌握的重要基础,需要的朋友可以参考下 ...

    李海彬
  • Go 语言入门系列:原生数据类型

    前面一篇文章介绍了 Go 基本语法,变量的声明与初始化。本文将会具体介绍 Go 原生数据类型。Go 语言中具备丰富的数据类型,基本类型有整型、浮点数、布尔型、字...

    aoho求索
  • 【初识Go】| Day5 字典、字符串

    字典/哈希表是一种巧妙并且实用的数据字结构。它是一个无序的key/value对的集合,其中所有的key都是不同的,然后通过给定的key可以在常数时间复杂度内检索...

    yussuy
  • go-基本数据类型和运算符

    Go语言中的基本数据类型有: 整型、浮点型、布尔型、字符串、数组、切片、map、函数、结构体和通道(channel)等。

    新人小试
  • Go 每日一库之 goquery

    goquery是用 Go 语言编写的一个类似于 jQuery 的库。它基于 HTML 解析库net/html和 CSS 库cascadia,提供与 jQuery...

    用户7731323
  • GO语言基本类型分析

    一、整型 go语言有13种整形,其中有2种只是名字不同,实质是一样的,所以,实质上go语言有11种整形。如下: (1)int :依赖不同平台下的实现,可以是in...

    李海彬
  • [GO语言基础] 三.变量声明、数据类型、标识符及编程练习12题

    作为网络安全初学者,会遇到采用Go语言开发的恶意样本。因此从今天开始从零讲解Golang编程语言,一方面是督促自己不断前行且学习新知识;另一方面是分享与读者,希...

    Eastmount
  • 用go语言爬取珍爱网 | 第一回

    在返回体里可以找到<meta charset="gbk" /> 即编码为gbk,而go默认编码为utf-8,所以就会出现乱码。接下来用第三方库将其编码格式转为u...

    我的小碗汤
  • golang学习笔记5:字符串及相关函数

    字符串是 UTF-8 字符的一个序列(当字符为 ASCII 码时则占用 1 个字节,其它字符根据需要占用 2-4 个字节)。UTF-8 是被广泛使用的编码格式,...

    JKXQJ
  • Go将数字转换为字符串的正确姿势

    在许多语言中,你可以轻松地将任何数据类型转换为字符串,只需将其与字符串连接,或者使用类型转换表达式即可。但是,如果你在Go中尝试执行似乎很明显的操作(例如将in...

    KevinYan
  • 如何将一个Python脚本转换成exe文件?

    有很多时候,我们需要把一个Python脚本,打包成一个exe文件,在windows环境使用。具体如何实现呢?请看下面:

    TalkPython
  • go 语言string之解析

    string 在go中如何定义的? string 的底层原理与细节? string 如何具体使用?

    黑白格
  • golang-101-hacks(10)——String

    注:本文是对golang-101-hacks中文翻译。 在Go中string是由不可变的字节数组构成的。一旦赋值,就不能修改字符串的值。例如 In Go, ...

    羊羽shine
  • 一起来学Go --- (go的枚举以及数据类型)

    枚举指一系列的相关的常量,比如下面关于一个星期的中每天的定义,通过上篇博文,我们可以用在const后跟一对圆括号的方式定义一组常量,这种定义法在go语言中通常用...

    Wyc
  • Go语言之父带你重新认识字符串、字节、rune和字符

    文章篇幅还是挺长的,大家时间都很宝贵所以我先把文章探究的问题的结论放在前面,有时间的同学还是建议整篇读一下。

    KevinYan
  • Go语言学习(三)| 基础数据类型

    字符串在Go中是 UTF-8 的由双引号(")或反引号(``)包裹的字符序列(类型为string)。如果使用单引号则表示一个字符(UTF-8编码)一旦给变量赋值...

    Mervyn
  • Python常识

    一、强类型语言与弱类型语言 1、强类型语言 强类型语言是一种总是强制类型定义的语言,要求变量的使用要严格符合定义,所有变量都必须先定义后使用。例如:java、....

    py3study
  • Go 数据存储篇(三):通过 CSV 格式读写文本数据

    在上篇教程中,学院君给大家演示了如何通过 JSON 编码存储文本数据到磁盘文件,除此之外,Go 语言还提供了对 CSV 格式文件的支持,CSV 文件本质上虽然就...

    学院君

扫码关注云+社区

领取腾讯云代金券