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中文乱码内容请搜索w3xue以前的文章或继续浏览下面的相关文章希望大家以后多多支持w3xue!