Here is a newer method.
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) }
I used iconv-go for such a conversion, you should know what your ANSI code page is, in my case, it is "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])) }
source share