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