Golang Go语言中分享一个将Windows记事本各种编码文字转成UTF8
起初想用 unoconv 将各类文档转成 pdf,txt 确实是一头包。这个方法基本可以将 txt 4 种格式都统一起来。 注意 linux 下需设置
LANG C.UTF-8
package until
import (
“unicode/utf16”
“bytes”
“golang.org/x/text/encoding/simplifiedchinese”
“golang.org/x/text/transform”
“io/ioutil”
)
func Utf16toString(b []uint8) (string) {
if len(b)&1 != 0 {
return string(b)
}
var bom int
if len(b) >= 2 {
switch n := int(b[0])<<8 | int(b[1]); n {
case 0xfffe:
bom = 1
fallthrough
case 0xfeff:
b = b[2:]
w := make([]uint16, len(b)/2)
for i := range w {
w[i] = uint16(b[2i+bom&1])<<8 | uint16(b[2i+(bom+1)&1])
}
return string(utf16.Decode(w))
default:
gbk, _ := GbkToUtf8(b)
return string(gbk)
}
} else {
return string(b)
}
}
func GbkToUtf8(s []byte) ([]byte, error) {
reader := transform.NewReader(bytes.NewReader(s), simplifiedchinese.GBK.NewDecoder())
d, e := ioutil.ReadAll(reader)
if e != nil {
return nil, e
}
return d, nil
}
Golang Go语言中分享一个将Windows记事本各种编码文字转成UTF8
更多关于Golang Go语言中分享一个将Windows记事本各种编码文字转成UTF8的实战教程也可以访问 https://www.itying.com/category-94-b0.html
更多关于Golang Go语言中分享一个将Windows记事本各种编码文字转成UTF8的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
在Go语言中,将Windows记事本中不同编码的文字转换成UTF-8编码,通常涉及读取源文件、检测其编码,然后重新编码为UTF-8。以下是一个基本的实现思路:
- 读取文件:使用
os.Open
打开文件。 - 检测编码:可以使用第三方库如
github.com/saintfish/chardet
来检测文件编码。 - 读取内容并转换编码:根据检测到的编码,读取文件内容并转换为UTF-8。
- 写入新文件:将转换后的内容写入新的UTF-8编码文件中。
示例代码如下:
package main
import (
"bytes"
"fmt"
"io/ioutil"
"log"
"os"
"github.com/saintfish/chardet"
)
func main() {
// 打开文件
file, err := os.Open("input.txt")
if err != nil {
log.Fatal(err)
}
defer file.Close()
// 读取文件内容
data, err := ioutil.ReadAll(file)
if err != nil {
log.Fatal(err)
}
// 检测编码
result := chardet.DetectBest(data)
encoding := result.Charset
// 转换为UTF-8
utf8Data, err := iconv.NewReader(encoding, "utf-8").ReadBytes(bytes.NewReader(data))
if err != nil {
log.Fatal(err)
}
// 写入新文件
err = ioutil.WriteFile("output_utf8.txt", utf8Data, 0644)
if err != nil {
log.Fatal(err)
}
fmt.Println("转换完成")
}
注意:示例中使用了iconv
库进行编码转换,你可能需要先安装它。