欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

CMD下执行Go出现中文乱码的解决方法

程序员文章站 2022-03-09 23:03:03
目录1、报错信息如下2、原因分析3、解决方法4、封装处理乱码方法5、解决乱码完整代码1、报错信息如下2、原因分析因为go的编码是utf-8,而cmd的活动页是cp936(gbk),因此产生乱码。在中文...

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出现中文乱码的解决方法的文章就介绍到这了,更多相关cmd执行go中文乱码内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!