用到的外部包:

"github.com/axgle/mahonia"

ANSI的解码与编码

未解码内容示例:

C4E3BAC3D1BDA3ACBAC3BFAAD0C4A3A1

解码之后内容:

你好呀,好开心!

解码代码:

func Ansi2String(ascii string) string {
    var baKeyword = make([]byte, len(ascii)/2)
    for i := 0; i < len(baKeyword); i++ {
        baKeyword[i] = byte(0xff & StringToInt64(ascii[i*2:i*2+2]))
    }
    return mahonia.NewDecoder("GBK").ConvertString(string(baKeyword[:]))
}

func StringToInt64(str string) int64 {
    if val, err := strconv.ParseInt(str, 16, 64); err != nil {
        panic(err)
    } else {
        return val
    }
    return 0
}

编码代码:

func String2Ansi(str string) string {
    if str == "" {
        return ""
    }
    bytesTemp := []byte(mahonia.NewEncoder("GBK").ConvertString(str))
    var buffer bytes.Buffer
    for i := 0; i < len(bytesTemp); i++ {
        buffer.WriteString(fmt.Sprintf("%02x", bytesTemp[i]&0xff))
    }
    return strings.ToUpper(mahonia.NewEncoder("UTF-8").ConvertString(buffer.String()))
}

UCS2的解码与编码

未解码内容示例:

4F60597D5440FF0C597D5F005FC3FF01

解码之后内容:

你好呀,好开心!

解码:

func Ucs2Tostring(str string) string {
    var sUnicodev = make([]string, 0)
    for i := 0; i < len(str); i = i + 4 {
        sUnicodev = append(sUnicodev, str[i:i+4])
    }
    var context string
    for _, v := range sUnicodev {
        if len(v) < 1 {
            continue
        }
        temp, err := strconv.ParseInt(v, 16, 32)
        if err != nil {
            panic(err)
        }
        context += fmt.Sprintf("%c", temp)
    }
    return context
}

编码:

func StringToucs2(inStr string) string {
    if inStr == "" {
        return ""
    }
    u := utf16.Encode([]rune(inStr))
    dst := make([]byte, len(u)*2)
    wi := 0
    for _, r := range u {
        binary.BigEndian.PutUint16(dst[wi:], uint16(r))
        wi += 2
    }
    return strings.ToUpper(fmt.Sprintf("%x", dst))
}

UTF-8的编码与解码

未解码内容示例:

E4BDA0E5A5BDE59180EFBC8CE5A5BDE5BC80E5BF83EFBC81

解码之后内容:

你好呀,好开心!

解码:

func Utf8Encode2String(str string) string {
    hexData, err := hex.DecodeString(str)
    if err != nil {
        panic(err)
    }
    // 将 byte 转换 为字符串 输出结果
    return string(hexData)
}

编码:

func String2Utf8(str string) string{
    return strings.ToUpper(fmt.Sprintf("%x", str))
}

来源:
题目:《用goalng实现ANSI、UCS2、UTF-8文本字符串的解码与编码》
作者:想吃窝窝头
链接:https://blog.csdn.net/sunjiaming0128/article/details/112267803