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 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM