CMD下執(zhí)行Go出現(xiàn)中文亂碼的解決方法
1、報(bào)錯(cuò)信息如下

2、原因分析
因?yàn)镚o的編碼是UTF-8,而CMD的活動(dòng)頁是cp936(GBK),因此產(chǎn)生亂碼。在中文Windows系統(tǒng)中,如果一個(gè)文本文件是UTF-8編碼的,那么在CMD.exe命令行窗口(所謂的DOS窗口)中不能正確顯示文件中的內(nèi)容。在默認(rèn)情況下,命令行窗口中使用的代碼頁是中文或者美國(guó)的,即編碼是中文字符集或者英文字符集。
3、解決方法
golang處理中文時(shí)默認(rèn)是utf8,當(dāng)遇到其他如GBK字符是就會(huì)出現(xiàn)亂碼,此處介紹golang 官方golang.org/x/text/encoding/simplifiedchinese包下的編碼轉(zhuǎn)換
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 執(zhí)行的bat文件完整路徑
//返回錯(cuò)誤信息及消息提示
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í)行報(bào)錯(cuò)
return err, message
} else {
err = c.Run()
if err != nil {
//處理中文亂碼
garbledStr := ConvertByte2String(w.Bytes(), GB18030)
//文件存在 但執(zhí)行bat文件報(bào)錯(cuò)
return err, garbledStr
}
}
//文件存在并且執(zhí)行bat文件成功
return err, message
}
到此這篇關(guān)于CMD下執(zhí)行Go出現(xiàn)中文亂碼的解決方法的文章就介紹到這了,更多相關(guān)CMD執(zhí)行Go中文亂碼內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Go語言Gin框架前后端分離項(xiàng)目開發(fā)實(shí)例
本文主要介紹了Go語言Gin框架前后端分離項(xiàng)目開發(fā)工程化實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-11-11
Go 通過結(jié)構(gòu)struct實(shí)現(xiàn)接口interface的問題
這篇文章主要介紹了Go 通過結(jié)構(gòu)struct實(shí)現(xiàn)接口interface的問題,本文通過示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-10-10
利用GO語言實(shí)現(xiàn)多人聊天室實(shí)例教程
聊天室的實(shí)現(xiàn)大家應(yīng)該都遇到過,這篇文章主要給大家介紹了關(guān)于利用GO語言實(shí)現(xiàn)多人聊天室的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧。2018-03-03

