首页 > 其他分享 >golang按换行符一行一行读取GBK文件

golang按换行符一行一行读取GBK文件

时间:2023-12-10 22:33:21浏览次数:26  
标签:文件 NewReader err GBK 一行 filename golang decoder

package awesomeProject1

import (
	"bufio"
	"fmt"
	"github.com/axgle/mahonia"
	"io"
	"log"
	"os"
)

func main() {
	filename := "/tmp/test.txt"
	readTbkByLine(filename)
}

func readTbkByLine(filename string) {
	FileHandle, err := os.Open(filename)
	if err != nil {
		log.Println(err)
		return
	}
	defer FileHandle.Close()
	// 指定gbk解码
	decoder := mahonia.NewDecoder("gbk")
	buf := bufio.NewReader(decoder.NewReader(FileHandle))
	for {
		// ReadBytes 方法安全可用,以换行符作为读取文件的截止符,经过多次测试GBK文件没有乱码
		line, e := buf.ReadBytes('\n')
		if e != nil {
			panic(e)
		}
		// 结束
		if e == io.EOF {
			break
		}
		fmt.Println(string(line))
	}
}

// readGbk 本方法仅仅做对照,因为ReadLine方法在有些测试文件有问题
func readGbk(filename string) {
	f, err := os.Open(filename)
	if err != nil {
		fmt.Println("文件不存在:", filename)
		return
	}
	decoder := mahonia.NewDecoder("gbk") // 把原来ANSI格式的文本文件里的字符,用gbk进行解码。
	buf := bufio.NewReader(decoder.NewReader(f))
	for {
		// 按照ReadLine读取行有些测试的GBK文件文件
		l, _, e := buf.ReadLine()
		if e == io.EOF {
			break
		}
		fmt.Println(string(l))
	}
}

标签:文件,NewReader,err,GBK,一行,filename,golang,decoder
From: https://www.cnblogs.com/jing1024/p/17893382.html

相关文章

  • Rusty Tuesday :Rust 基金会一行来访 Databend Labs,共话技术创新!
    在当今快速发展的技术浪潮中,Rust作为一种新兴的编程语言,凭借其卓越的内存安全特性和高效的性能,吸引了全球开发者的广泛关注。2023年12月05日,由DatabendLabs主办的首届RustyTuesday活动正式在北京揭开序幕。在本次活动中,我们非常荣幸地邀请到了多位行业精英:Rust语言......
  • beego框架 golang web项目-个人博客系统
    beego框架golangweb项目-个人博客系统beego个人博客系统功能介绍首页分页展示博客博客详情评论文章专栏分类导航资源分享时光轴点点滴滴关于本站后台管理登录系统设置分类添加修改删除管理博文添加修改删除管理基于Go语言和beego框架前端使用layui布局开发的......
  • MySQL LOAD DATA LOCAL, 如何跳过第一行?
    在MySQL中,使用LOADDATALOCAL命令可以将数据从本地的文件导入到数据库里面。常见的导入数据格式是csv和txt。但是在导入csv和txt格式的数据时,第一行通常是表头,而不是数据,因此我们需要跳过第一行,只导入后面的数据。阅读更多:MySQL教程 方法一:使用IGNORE关键字LOADDATALOCA......
  • Golang标准库:syslog包代码示例
    以下是一个示例代码,展示了如何使用syslog包进行系统日志记录:packagemainimport( "log" "log/syslog")funcmain(){ //创建一个连接到本地系统日志的写入器 writer,err:=syslog.New(syslog.LOG_INFO,"Example") iferr!=nil{ log.Fatal("Failedtoconnect......
  • Golang标准库:expvar 包代码示例
    expvar包提供了一种在运行时公开程序内部变量的方法,以便进行监控和调试。以下是一个示例代码,展示了如何使用expvar包:packagemainimport( "expvar" "fmt" "net/http")funcmain(){ //定义一个expvar.Int变量 counter:=expvar.NewInt("counter") //设置一个......
  • Golang os包代码示例:获取命令行参数、获取环境变量、创建和删除文件、检查文件或目录
    以下是一些示例代码,展示了如何使用os包进行操作系统相关的操作:获取命令行参数:packagemainimport( "fmt" "os")funcmain(){ args:=os.Args fori,arg:=rangeargs{ fmt.Printf("Argument%d:%s\n",i,arg) }}获取环境变量:packagemainimport( "f......
  • Golang标准库:runtime/debug 包代码示例
    runtime/debug包提供了与运行时调试和诊断相关的功能。以下是一个示例代码,展示了如何使用runtime/debug包的一些功能:packagemainimport( "fmt" "runtime/debug")funcmain(){ //获取当前goroutine的栈跟踪信息 stackTrace:=debug.Stack() //打印栈跟踪信息......
  • Golang flag包:命令行参数解析入门代码示例
    以下是一个示例代码,展示了如何使用flag包处理命令行参数:packagemainimport( "flag" "fmt")funcmain(){ //定义命令行参数对应的变量 varnamestring varageint varisAdminbool //绑定命令行参数与变量 flag.StringVar(&name,"name","","En......
  • Golang flag包:nginx命令行参数解析代码示例
    flag-命令行参数解析在写命令行程序(工具、server)时,对命令参数进行解析是常见的需求。各种语言一般都会提供解析命令行参数的方法或库,以方便程序员使用。如果命令行参数纯粹自己写代码解析,对于比较复杂的,还是挺费劲的。在go标准库中提供了一个包:flag,方便进行命令行解析。注:区分......
  • Golang 泛型及代码示例
    以下是一个包含Golang泛型代码示例的文件:packagemainimport("fmt""sort")//泛型函数funcAdd[Tany](x,yT)T{returnx+y}funcmain(){//将两个整数相加fmt.Println(Add(1,2))//3//将两个字符串相加fmt.Println(Add(......