• 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  u4e2du6587 
    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 }
  • 相关阅读:
    bzoj 1086 [SCOI2005]王室联邦——思路
    bzoj 3809 Gty的二逼妹子序列——莫队+分块
    bzoj 3781 小B的询问——分块
    bzoj 3309 DZY Loves Math——反演+线性筛
    洛谷 1079 Vigenère 密码——模拟水题
    洛谷 1082 同余方程——exgcd(水题)
    bzoj2662 [BeiJing wc2012]冻结 ——分层图
    bzoj2242 [SDOI2011]计算器——BSGS
    bzoj1008 [HNOI2008]越狱——快速幂
    bzoj1607 [Usaco2008 Dec]Patting Heads 轻拍牛头——暴力
  • 原文地址:https://www.cnblogs.com/zhangtaotqy/p/9247922.html
Copyright © 2020-2023  润新知