使用Go语言做个UTF-8转GB2312的代码,输入utf-8编码的文本,输出转换后的国标编码的hex内码
package mainimport ("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.Transformerswitch 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.Builderfor _, 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