您好,登錄后才能下訂單哦!
CMD下執(zhí)行Go出現(xiàn)中文亂碼的解決方法是什么,相信很多沒有經(jīng)驗(yàn)的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。
因?yàn)镚o的編碼是UTF-8,而CMD的活動頁是cp936(GBK),因此產(chǎn)生亂碼。在中文Windows系統(tǒng)中,如果一個文本文件是UTF-8編碼的,那么在CMD.exe命令行窗口(所謂的DOS窗口)中不能正確顯示文件中的內(nèi)容。在默認(rèn)情況下,命令行窗口中使用的代碼頁是中文或者美國的,即編碼是中文字符集或者英文字符集。
golang處理中文時默認(rèn)是utf8,當(dāng)遇到其他如GBK字符是就會出現(xiàn)亂碼,此處介紹golang 官方golang.org/x/text/encoding/simplifiedchinese包下的編碼轉(zhuǎn)換
simplifiedchinese.GB18030.NewDecoder().Bytes()
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 }
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 執(zhí)行的bat文件完整路徑 //返回錯誤信息及消息提示 func ExecCommand(arg string) (error, string) { c := exec.Command("cmd", "/C", arg) w := bytes.NewBuffer(nil) c.Stderr = w message := "執(zhí)行" + arg + "文件抽取數(shù)據(jù)成功" _, 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 //文件不存在并且執(zhí)行報錯 return err, message } else { err = c.Run() if err != nil { //處理中文亂碼 garbledStr := ConvertByte2String(w.Bytes(), GB18030) //文件存在 但執(zhí)行bat文件報錯 return err, garbledStr } } //文件存在并且執(zhí)行bat文件成功 return err, message }
看完上述內(nèi)容,你們掌握CMD下執(zhí)行Go出現(xiàn)中文亂碼的解決方法是什么的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。