亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

CMD下執行Go出現中文亂碼的解決方法是什么

發布時間:2021-12-08 13:27:45 來源:億速云 閱讀:412 作者:柒染 欄目:開發技術

CMD下執行Go出現中文亂碼的解決方法是什么,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

1、報錯信息如下

CMD下執行Go出現中文亂碼的解決方法是什么

2、原因分析

因為Go的編碼是UTF-8,而CMD的活動頁是cp936(GBK),因此產生亂碼。在中文Windows系統中,如果一個文本文件是UTF-8編碼的,那么在CMD.exe命令行窗口(所謂的DOS窗口)中不能正確顯示文件中的內容。在默認情況下,命令行窗口中使用的代碼頁是中文或者美國的,即編碼是中文字符集或者英文字符集。

3、解決方法

golang處理中文時默認是utf8,當遇到其他如GBK字符是就會出現亂碼,此處介紹golang 官方golang.org/x/text/encoding/simplifiedchinese包下的編碼轉換

simplifiedchinese.GB18030.NewDecoder().Bytes()

4、封裝處理亂碼方法

package main

import "golang.org/x/text/encoding/simplifiedchinese"

type Charset string

const (
   UTF8    = Charset("UTF-8")
   GB18030 = Charset("GB18030")
)

func ConvertByte2String(byte []byte, charset Charset) string {

	var str string
	switch charset {
	case GB18030:
		decodeBytes, _ := simplifiedchinese.GB18030.NewDecoder().Bytes(byte)
		str = string(decodeBytes)
	case UTF8:
		fallthrough
	default:
		str = string(byte)
	}

	return str
}

5、解決亂碼完整代碼

package main

import (
	"bytes"
	"fmt"
	"golang.org/x/text/encoding/simplifiedchinese"
	"os"
	"os/exec"
)

type Charset string

const (
	UTF8    = Charset("UTF-8")
	GB18030 = Charset("GB18030")
)

func ConvertByte2String(byte []byte, charset Charset) string {

	var str string
	switch charset {
	case GB18030:
		decodeBytes, _ := simplifiedchinese.GB18030.NewDecoder().Bytes(byte)
		str = string(decodeBytes)
	case UTF8:
		fallthrough
	default:
		str = string(byte)
	}

	return str
}

//arg  執行的bat文件完整路徑
//返回錯誤信息及消息提示
func ExecCommand(arg string) (error, string) {
	c := exec.Command("cmd", "/C", arg)
	w := bytes.NewBuffer(nil)
	c.Stderr = w
	message := "執行" + arg + "文件抽取數據成功"
	_, err1 := os.Stat(arg)
	var err error
	//判斷文件是否存在
	if err1 != nil {
		err := c.Run()
		if err != nil {
			fmt.Printf("Run returns: %s\n", err)
		}
		//處理中文亂碼
		garbledStr := ConvertByte2String(w.Bytes(), GB18030)
		message = err1.Error() + garbledStr
		//文件不存在并且執行報錯
		return err, message
	} else {
		err = c.Run()
		if err != nil {
			//處理中文亂碼
			garbledStr := ConvertByte2String(w.Bytes(), GB18030)
			//文件存在 但執行bat文件報錯
			return err, garbledStr
		}
	}
	//文件存在并且執行bat文件成功
	return err, message
}

看完上述內容,你們掌握CMD下執行Go出現中文亂碼的解決方法是什么的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

庆安县| 博乐市| 辽源市| 柳江县| 句容市| 黎城县| 望城县| 博客| 讷河市| 达州市| 宁海县| 沐川县| 搜索| 江都市| 洪湖市| 常德市| 蕲春县| 红安县| 平邑县| 萍乡市| 库伦旗| 阳原县| 库车县| 汕头市| 商河县| 辛集市| 阳江市| 平潭县| 通州区| 新蔡县| 三都| 岱山县| 和田县| 金溪县| 耿马| 弋阳县| 航空| 绥中县| 瑞昌市| 英吉沙县| 来宾市|