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

发布时间 2023-12-10 22:30:21作者: 熊先生不开玩笑
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))
	}
}