CMD下執行Go出現中文亂碼的解決方法
1、報錯信息如下
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出現中文亂碼的解決方法的文章就介紹到這瞭,更多相關CMD執行Go中文亂碼內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- Go語言基礎Json序列化反序列化及文件讀寫示例詳解
- go原生庫的中bytes.Buffer用法
- Go語言如何高效的進行字符串拼接(6種方式對比分析)
- Golang實現AES對稱加密的過程詳解
- go語言中的json與map相互轉換實現