goquery 增加GBK支持

本文介绍如何在Go语言中处理GBK编码的网页内容,包括使用simplifiedchinese包进行编码转换,以及对goquery库进行扩展以更好地支持GBK编码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、描述

golang默认编码为utf-8,goquery也一样,默认处理的utf-8的页面。但网页中会有各种格式像常见的"gb2312","gbk"等。处理这些编码的网页时就会出现头大的乱码.golang没有自带的编解码包,需要借助第三方包处理。

2、simplifiedchinese 处理GBK编码##

第三方的编码包很多,我这里使用的是simplifiedchinese。因为simplifiedchinese和其它的相比,它不需要gcc的支持。

package util

import (
	"golang.org/x/text/encoding/simplifiedchinese"
)

func DecodeToGBK(text string) (string, error) {

	dst := make([]byte, len(text)*2)
	tr := simplifiedchinese.GB18030.NewDecoder()
	nDst, _, err := tr.Transform(dst, []byte(text), true)
	if err != nil {
		return text, err
	}

	return string(dst[:nDst]), nil
}

3、goquery简单转换GBK

下面我们在使用goquery的时候,把编码异常的字符转过来就是。
如:

doc, _ := goquery.NewDocument(url)

nameNode := doc.Find("div.name").First()
name, _ := nameNode.Html()
name, _ = util.DecodeToGBK(name)

ageNode := doc.Find("div.age").First()
age, _ := ageNode.Html()
age, _ = util.DecodeToGBK(age)
 

4、重写goquery 中的方法支持GBK

像上面的编码转换的过程一样,如果多个节点需要编码转换,那么我们的业务代码显得很臃肿,不够优雅。我们可以在goquery Selection对象原有的方法上,增加一些对GBK支持的方法。

原有Html()方法

// Html gets the HTML contents of the first element in the set of matched
// elements. It includes text and comment nodes.
func (s *Selection) Html() (ret string, e error) {
	// Since there is no .innerHtml, the HTML content must be re-created from
	// the nodes using html.Render.
	var buf bytes.Buffer

	if len(s.Nodes) > 0 {
		for c := s.Nodes[0].FirstChild; c != nil; c = c.NextSibling {
			e = html.Render(&buf, c)
			if e != nil {
				return
			}
		}
		ret = buf.String()
	}

	return
}

增加GBK支持的GBKHtml()方法:

func (s *Selection) GBKHtml() (ret string, e error) {
	// Since there is no .innerHtml, the HTML content must be re-created from
	// the nodes using html.Render.
	ret, _ = s.Html()
	ret, _ = util.DecodeToGBK(ret)
	return
}

优雅地使用:

doc, _ := goquery.NewDocument(url)

name, _ := doc.Find("div.name").First().GBKHtml()
age, _ := doc.Find("div.age").First().GBKHtml()

### 在 Sublime Text 中添加 GBK 编码支持 为了使 Sublime Text 支持 GBK 编码,需安装 `ConvertToUTF8` 插件。此插件允许处理非 UTF-8 编码文件,包括 GBK。 #### 安装 Package Control 对于新版本的 Sublime Text (如 3.2.2),可通过内置功能轻松安装 Package Control: 1. 打开 Sublime Text 编辑器。 2. 转到菜单栏中的 **Tools**(工具),选择 **Install Package Control…**[^2]。 当显示提示信息表示已成功安装,则可以在菜单中看到新的子菜单项,如 **Package Settings** 和 **Package Control**。 如果当前版本未提供该选项,可参照官方文档获取其他安装方法。 #### 安装 ConvertToUTF8 插件 一旦确认 Package Control 已正确安装,接下来就是安装必要的编码转换插件: 1. 使用快捷键 `Ctrl+Shift+P` 或者通过导航至 **Preferences -> Package Control** 来调出命令面板。 2. 输入 `pci` 并选择 **Package Control: Install Package** 命令。 3. 在搜索框内输入 `ConvertToUTF8`,从列表中选取并安装此插件[^4]。 完成上述步骤之后,在尝试打开或保存带有 GBK 编码的文件时,Sublime Text 将能够识别并正确解析这些字符集[^3]。 此外,还可以手动指定文件编码为 GBK- 文件被加载后,前往顶部菜单栏; - 点击 **File** 下拉菜单下的 **Set Encoding** 子菜单; - 浏览可用编码直至发现 **GBK** 选项,并将其应用于当前文档。 ```python # 示例 Python 文件头声明编码方式 # -*- coding: gbk -*- print("这是一个测试") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值