Go 编码问题的解决方案

1.首先需要mahonia 这个包

1 go get github.com/axgle/mahonia

然后新建一个 func

src 字符串

srcCode 字符串当前编码

tagCode 要转换的编码

func ConvertToString(src string, srcCode string, tagCode string) string {
    srcCoder := mahonia.NewDecoder(srcCode)
    srcResult := srcCoder.ConvertString(src)
    tagCoder := mahonia.NewDecoder(tagCode)
    _, cdata, _ := tagCoder.Translate([]byte(srcResult), true)
    result := string(cdata)
    return result
}

l例子:

调用ConvertToString 方法

1 str := "乱码的字符串变量"
2 str  = ConvertToString(str, "gbk", "utf-8")
3 fmt.Println(str)

2.unicode 码和中文之间的转换

将中文转换为unicode码,使用golang中的strconv包中的QuoteToASCII直接进行转换,将unicode码转换为中文就比较麻烦一点,先对unicode编码按\u进行分割,然后使用strconv.ParseInt,将16进制数字转换Int64,在使用fmt.Sprintf将数字转换为字符,最后将其连接在一起,这样就变成了中文字符串了。 参考代码如下:

 1 package main
 2 
 3 import (
 4     "fmt"
 5     "strconv"
 6     "strings"
 7 )
 8 
 9 func main() {
10     sText := "中文"
11     textQuoted := strconv.QuoteToASCII(sText)
12     textUnquoted := textQuoted[1 : len(textQuoted)-1]
13     fmt.Println(textUnquoted)
14 
15     sUnicodev := strings.Split(textUnquoted, "\\u")
16     var context string
17     for _, v := range sUnicodev {
18         if len(v) < 1 {
19             continue
20         }
21         temp, err := strconv.ParseInt(v, 16, 32)
22         if err != nil {
23             panic(err)
24         }
25         context += fmt.Sprintf("%c", temp)
26     }
27     fmt.Println(context)
28 }

运行结果:

1  \u4e2d\u6587 
2 中文

3. 需要导入的包

"golang.org/x/text/transform"
"golang.org/x/text/encoding/simplifiedchinese"

如果golang.org下载不下来,可以去github上下载克隆版,

go get github.com/zieckey/golang.org

然后将golang.org移动到src目录下即可。

例子: gbk转utf-8

1 func gbk2utf8(str byte[]) ([]byte, error) {
2 return ioutil.ReadAll(transform.NewReader(bytes.NewReader(str), simplifiedchinese.GBK.NewDecoder()))
3 }

 

posted @ 2018-06-30 16:56  革凡  阅读(1992)  评论(0编辑  收藏  举报