Utf 8 如何将ansi文本转换为utf8

Utf 8 如何将ansi文本转换为utf8,utf-8,go,ansi,Utf 8,Go,Ansi,如何在Go中将ansi文本转换为utf8? 我正在尝试将ansi字符串转换为utf8字符串。Go只有UTF-8字符串。您可以使用此处描述的从字节[]转换为UTF8字符串: 如果不自己编写转换或使用第三方软件包,就无法完成转换。你可以试着用这个:我写了一个对我有用的函数,也许其他人可以用这个。它从Windows-1252转换为UTF-8。我已经转换了一些代码点,Windows-1252将其视为字符,但Unicode将其视为控制字符() 这里有一个更新的方法 package main imp

如何在Go中将ansi文本转换为utf8?
我正在尝试将ansi字符串转换为utf8字符串。

Go只有UTF-8字符串。您可以使用此处描述的从字节[]转换为UTF8字符串:


如果不自己编写转换或使用第三方软件包,就无法完成转换。你可以试着用这个:

我写了一个对我有用的函数,也许其他人可以用这个。它从
Windows-1252
转换为
UTF-8
。我已经转换了一些代码点,
Windows-1252
将其视为字符,但Unicode将其视为控制字符()

这里有一个更新的方法

package main    
import (
    "bytes"
    "fmt"
    "io/ioutil"    
    "golang.org/x/text/encoding/traditionalchinese"
    "golang.org/x/text/transform"
)    
func Decode(s []byte) ([]byte, error) {
    I := bytes.NewReader(s)
    O := transform.NewReader(I, traditionalchinese.Big5.NewDecoder())
    d, e := ioutil.ReadAll(O)
    if e != nil {
        return nil, e
    }
    return d, nil
}
func main() {
    s := []byte{0xB0, 0xAA}
    b, err := Decode(s)
    fmt.Println(string(b))
    fmt.Println(err)
}
我是使用iconv去做这样的转换,你必须知道你的ANSI代码页是什么,在我的情况下,它是'big5'

package main
import (
    "fmt"
    //iconv "github.com/djimenez/iconv-go"
    iconv "github.com/andelf/iconv-go"
    "log"
)

func main() {
    ibuf := []byte{170,76,80,67}
    var obuf [256]byte

    // Method 1: use Convert directly
    nR, nW, err := iconv.Convert(ibuf, obuf[:], "big5", "utf-8")
    if err != nil {
        log.Fatalln(err)
    }
    log.Println(nR, ibuf)
    log.Println(obuf[:nW])
    fmt.Println(string(obuf[:nW]))

    // Method 2: build a converter at first
    cv, err := iconv.NewConverter("big5", "utf-8")
    if err != nil {
        log.Fatalln(err)
    }
    nR, nW, err = cv.Convert(ibuf, obuf[:])
    if err != nil {
        log.Fatalln(err)
    }
    log.Println(string(obuf[:nW]))
}

golang.org/x/text/encoding/charmap
包的功能正是为了解决这个问题

import "golang.org/x/text/encoding/charmap"

func DecodeWindows1250(enc []byte) string {
    dec := charmap.Windows1250.NewDecoder()
    out, _ := dec.Bytes(enc)
    return string(out)
}

func EncodeWindows1250(inp string) []byte {
    enc := charmap.Windows1250.NewEncoder()
    out, _ := enc.String(inp)
    return out
}

编辑:
undefined:ba
是replace
enc

@newacct。我只使用:
out,\u:=charmap.Windows1250.NewDecoder().String(输入)
import "golang.org/x/text/encoding/charmap"

func DecodeWindows1250(enc []byte) string {
    dec := charmap.Windows1250.NewDecoder()
    out, _ := dec.Bytes(enc)
    return string(out)
}

func EncodeWindows1250(inp string) []byte {
    enc := charmap.Windows1250.NewEncoder()
    out, _ := enc.String(inp)
    return out
}