自学内容网 自学内容网

go语言实现UTF8与GB2312内码转换

使用Go语言做个UTF-8转GB2312的代码,输入utf-8编码的文本,输出转换后的国标编码的hex内码

package main

import (
"fmt"
"os"
"strings"

"golang.org/x/text/encoding/simplifiedchinese"
"golang.org/x/text/transform"
)

// convertEncoding 将指定编码的文本转换为目标编码的文本
func convertEncoding(text, from, to string) (string, error) {
var encoder transform.Transformer
switch to {
case "GB2312":
encoder = simplifiedchinese.GB18030.NewEncoder() // 使用 GB18030 转换器
default:
return "", fmt.Errorf("不支持的目标编码:%s", to)
}

// 读取原始编码的文本内容
originalBytes := []byte(text)

// 使用转换器对原始编码的文本进行编码转换
convertedBytes, _, err := transform.Bytes(encoder, originalBytes)
if err != nil {
return "", fmt.Errorf("编码转换失败:%w", err)
}

// 将转换后的字节切片转换为十六进制字符串
var hexString strings.Builder

for _, b := range convertedBytes {
hexString.WriteString(fmt.Sprintf("%02X ", b))
}

return hexString.String(), nil
}

func main() {
// 从命令行参数获取UTF-8编码的文本
if len(os.Args) < 2 {
fmt.Println("请提供UTF-8编码的文本作为参数")
return
}
utf8Text := strings.Join(os.Args[1:], " ")

// 将UTF-8编码的文本转换为GB2312编码
gb2312Hex, err := convertEncoding(utf8Text, "UTF-8", "GB2312")
if err != nil {
fmt.Println("编码转换失败:", err)
return
}

// 输出转换后的GB2312编码文本的十六进制形式
fmt.Println("转换后的GB2312编码文本的十六进制形式:")
fmt.Println(gb2312Hex)
}

编译运行

go mod init
go mod tidy
go build 
./iconv 测试
转换后的GB2312编码文本的十六进制形式:
B2 E2 CA D4

原文地址:https://blog.csdn.net/wuquan_1230/article/details/145165678

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!