使用Go語言做個UTF-8轉(zhuǎn)GB2312的代碼,輸入utf-8編碼的文本,輸出轉(zhuǎn)換后的國標編碼的hex內(nèi)碼
package?main
import?(
? ??"fmt"
? ??"os"
? ??"strings"
? ??"golang.org/x/text/encoding/simplifiedchinese"
? ??"golang.org/x/text/transform"
)
// convertEncoding 將指定編碼的文本轉(zhuǎn)換為目標編碼的文本
func?convertEncoding(text, from, to?string)?(string,?error) {
? ??var?encoder transform.Transformer
? ??switch?to {
? ??case?"GB2312":
? ? ? ? encoder = simplifiedchinese.GB18030.NewEncoder()?// 使用 GB18030 轉(zhuǎn)換器
? ??default:
? ? ? ??return?"", fmt.Errorf("不支持的目標編碼:%s", to)
? ? }
? ??// 讀取原始編碼的文本內(nèi)容
? ? originalBytes := []byte(text)
? ??// 使用轉(zhuǎn)換器對原始編碼的文本進行編碼轉(zhuǎn)換
? ? convertedBytes, _, err := transform.Bytes(encoder, originalBytes)
? ??if?err !=?nil?{
? ? ? ??return?"", fmt.Errorf("編碼轉(zhuǎn)換失?。?w", err)
? ? }
? ??// 將轉(zhuǎn)換后的字節(jié)切片轉(zhuǎn)換為十六進制字符串
? ??var?hexString strings.Builder
? ??
? ??for?_, b :=?range?convertedBytes {
? ? ? ? hexString.WriteString(fmt.Sprintf("%02X ", b))
? ? }
? ??
? ??return?hexString.String(),?nil
}
func?main()?{
? ??// 從命令行參數(shù)獲取UTF-8編碼的文本
? ??if?len(os.Args) <?2?{
? ? ? ? fmt.Println("請?zhí)峁︰TF-8編碼的文本作為參數(shù)")
? ? ? ??return
? ? }
? ? utf8Text := strings.Join(os.Args[1:],?" ")
? ??// 將UTF-8編碼的文本轉(zhuǎn)換為GB2312編碼
? ? gb2312Hex, err := convertEncoding(utf8Text,?"UTF-8",?"GB2312")
? ??if?err !=?nil?{
? ? ? ? fmt.Println("編碼轉(zhuǎn)換失敗:", err)
? ? ? ??return
? ? }
? ??// 輸出轉(zhuǎn)換后的GB2312編碼文本的十六進制形式
? ? fmt.Println("轉(zhuǎn)換后的GB2312編碼文本的十六進制形式:")
? ? fmt.Println(gb2312Hex)
}
編譯運行
go mod init
go mod tidy
go build?
./iconv 測試
轉(zhuǎn)換后的GB2312編碼文本的十六進制形式:
B2 E2 CA D4
閱讀全文