目前电脑上有一些网上下载的txt文件,有不少读出来都是乱码,看了下格式有uft-16,utf-8(Bom有的带,有的不带)gb2312,还有一些是其他国家的语言编码,比如日语的,很乱。
转格式的库都需要提前知道编码格式,这种大家是怎么处理的呢?
感谢回答,我目前只找到一个库 "github.com/saintfish/chardet",有十年的历史了,哈哈。
```go
package main
import (
"bytes"
"fmt"
"io"
"io/ioutil"
"log"
"os"
"github.com/paulrosania/go-charset/charset"
_ "github.com/paulrosania/go-charset/data"
"github.com/saintfish/chardet"
)
func main() {
filePath := "e:\\demo.txt"
FileHandle, err := os.Open(filePath)
if err != nil {
log.Fatal(err)
}
defer FileHandle.Close()
buffer := make([]byte, 1024)
n, err := FileHandle.Read(buffer)
// 控制条件,根据实际调整
if err != nil && err != io.EOF {
log.Println(err)
}
// 如下代码打印出每次读取的文件块(字节数)
//fmt.Println(string(buffer[:n]))
text := buffer[:n]
detector := chardet.NewTextDetector()
result, err := detector.DetectBest(text)
if err == nil {
fmt.Printf(
"Detected charset is %s, language is %s",
result.Charset,
result.Language)
r, err := charset.NewReader(result.Charset, bytes.NewReader(text))
if err != nil {
log.Fatal(err)
}
result, err := ioutil.ReadAll(r)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", result)
}
}
```
效果还行
更多评论