用到的外部包:
"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