当前位置: 首页 > article >正文

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

http://www.kler.cn/a/505606.html

相关文章:

  • WEB 攻防-通用漏-XSS 跨站脚本攻击-反射型/存储型/DOMBEEF-XSS
  • 【漏洞分析】DDOS攻防分析
  • ubuntu支持中文的字体
  • 总结SpringBoot项目中读取resource目录下的文件多种方法
  • 恩山论坛任务python脚本
  • mac 安装docker
  • Node.js、Vue 和 React 的关系和区别
  • 一文掌握Docker
  • Ubuntu-Install-Ros2
  • MySQL 排除指定时间内重复记录的解决方案
  • VSCode连接远程docker环境
  • 宝塔面板 申请证书后 仍然提示不安全
  • 神经网络:什么是交叉熵?
  • C++并发编程之异常安全性增强
  • 基于ADMM交替方向乘子法的超大规模储备系统分布式协同优化算法收敛性matlab仿真与分析
  • PostgreSQL 的一些常用命令
  • LabVIEW与WPS文件格式的兼容性
  • 如何搭建 Vue.js 开源项目的 CI/CD 流水线
  • 《大语言模型后训练技术:指令、偏好、强化微调的深度解析与发展趋势》
  • 计算机网络 (42)远程终端协议TELNET
  • Vue2+OpenLayers给标点Feature添加信息窗体(提供Gitee源码)
  • 基于django中医药数据可视化平台(源码+lw+部署文档+讲解),源码可白嫖!
  • LeetCode热题100-二叉树的中序遍历【JavaScript讲解】
  • 11-1.Android 项目结构 - androidTest 包与 test 包(单元测试与仪器化测试)
  • 【C】数组和指针的关系
  • Ubuntu 安装和配置 MariaDB