登录
首页 >  Golang >  Go问答

使用 IANA 标准代码将 Windows 文本文档转换为 UTF-8 格式

来源:stackoverflow

时间:2024-03-05 18:00:23 432浏览 收藏

大家好,我们又见面了啊~本文《使用 IANA 标准代码将 Windows 文本文档转换为 UTF-8 格式》的内容中将会涉及到等等。如果你正在学习Golang相关知识,欢迎关注我,以后会给大家带来更多Golang相关文章,希望我们能一起进步!下面就开始本文的正式内容~

问题内容

我想使用 chardetgolang.org/x/text 将非 utf-8 文件转换为 utf-8。但是,到目前为止我发现的所有代码示例都要求用户对所需的转换方向进行硬编码。例如:

package main

import (
  "fmt"
  "io/ioutil"
  "os"
  "golang.org/x/text/encoding/charmap"
)

func main() {

  // write the string
  // encoded to windows-1252
  encoder := charmap.windows1252.newencoder()
  s, e := encoder.string("this is sample text with runes Š")
  if e != nil {
    panic(e)
  }
  ioutil.writefile("example.txt", []byte(s), os.modeperm)

  // decode to utf-8
  f, e := os.open("example.txt")
  if e != nil {
    panic(e)
  }
  defer f.close()
  decoder := charmap.windows1252.newdecoder()
  reader := decoder.reader(f)
  b, err := ioutil.readall(reader)
  if err != nil {
    panic(err)
  }
  fmt.println(string(b))
}

我需要如何更改以下行:

decoder := charmap.Windows1252.NewDecoder()

接受 iana 代码来选择所需的解码器? (chardet 返回小写代码页名称,例如 windows-1250windows-1252 等)


解决方案


这里最简单的解决方案也可能是最简单的:有一个工厂方法,它根据 iana 代码返回适当的解码器/编码器。您需要做的唯一工作是将 iana 代码映射到相应的字符映射。您可以找到所有 charmap here 的列表。

var codeToCharmap map[string]*charmap.Charmap

func init() {
    codeToCharmap = map[string]*charmap.Charmap{
        "windows-1250": charmap.Windows1250,
        "windows-1252": charmap.Windows1252,
        // ...
    }
}

func getDecoder(code string) *encoding.Decoder {
    if cm, ok := codeToCharmap[code]; ok {
        return cm.NewDecoder()
    }

    return nil
}

func getEncoder(code string) *encoding.Encoder {
    if cm, ok := codeToCharmap[code]; ok {
        return cm.NewEncoder()
    }

    return nil
}

理论要掌握,实操不能落!以上关于《使用 IANA 标准代码将 Windows 文本文档转换为 UTF-8 格式》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>