Utf 8 如何将ansi文本转换为utf8
如何在Go中将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
我正在尝试将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
是replaceenc@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
}