用goalng实现ascii、UCS2、UTF-8文本字符串的解码与编码

该博客介绍了如何使用Go语言进行ANSI、UCS2和UTF-8编码与解码的操作。通过`github.com/axgle/mahonia`库,展示了从十六进制字符串解码为中文文本,以及将文本编码为不同编码格式的过程。解码和编码函数分别对ANSI、UCS2和UTF-8进行了详细阐述。

用goalng实现ANSI、UCS2、UTF-8文本字符串的解码与编码

用到的外部包:

"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))
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值