go語言實現(xiàn)UTF8與GB2312內(nèi)碼轉(zhuǎn)換

01/25 09:55
757
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

使用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

 

 

相關推薦