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

1 回复

更多关于Golang Go语言中分享一个将Windows记事本各种编码文字转成UTF8的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


在Go语言中,将Windows记事本中不同编码的文字转换成UTF-8编码,通常涉及读取源文件、检测其编码,然后重新编码为UTF-8。以下是一个基本的实现思路:

  1. 读取文件:使用os.Open打开文件。
  2. 检测编码:可以使用第三方库如github.com/saintfish/chardet来检测文件编码。
  3. 读取内容并转换编码:根据检测到的编码,读取文件内容并转换为UTF-8。
  4. 写入新文件:将转换后的内容写入新的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库进行编码转换,你可能需要先安装它。

回到顶部