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

 更新时间:2021年12月08日 11:22:47   作者:ourLang  
需要在Go写的服务里面调用命令行或者批处理,并根据返回的结果做处理。但是windows下面用cmd返回中文会出现乱码,本文就详细的介绍一下解决方法,感兴趣的可以了解一下

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

相关文章

  • Golang轻量级IoC容器安装使用示例

    Golang轻量级IoC容器安装使用示例

    这篇文章主要为大家介绍了Golang轻量级IoC容器安装使用示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • Go语言基础go build命令用法及示例详解

    Go语言基础go build命令用法及示例详解

    这篇文章主要为大家介绍了Go语言基础go build命令用法及示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2021-11-11
  • Go语言流程控制详情

    Go语言流程控制详情

    这篇文章主要介绍了Go语言流程控制详情,流程控制包含分三大类:条件判断,循环控制和无条件跳转。下面关于更多相关内容需要的小伙伴可以参考一下
    2022-03-03
  • Go标准库strconv实现string类型与其他基本数据类型之间转换

    Go标准库strconv实现string类型与其他基本数据类型之间转换

    这篇文章主要为大家介绍了Go标准库strconv实现string类型与其他基本数据类型之间转换示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11
  • Go单元测试对GORM进行Mock测试

    Go单元测试对GORM进行Mock测试

    这篇文章主要为大家介绍了Go单元测试对GORM进行Mock测试用例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • Go语言实现的一个简单Web服务器

    Go语言实现的一个简单Web服务器

    这篇文章主要介绍了Go语言实现的一个简单Web服务器,本文先是给出一个使用http包建立的Web服务器源码,并对比了其它编程语言,需要的朋友可以参考下
    2014-10-10
  • golang 并发编程之生产者消费者详解

    golang 并发编程之生产者消费者详解

    这篇文章主要介绍了golang 并发编程之生产者消费者详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-05-05
  • Go语言实现切片增删改查的示例代码

    Go语言实现切片增删改查的示例代码

    这篇文章主要为大家详细介绍了Go语言中切片的使用(增删改查),文中的示例代码讲解详细,对我们学习Go语言有一定的帮助,需要的可以参考一下
    2022-04-04
  • 关于go平滑重启库overseer实现原理详解

    关于go平滑重启库overseer实现原理详解

    这篇文章主要为大家详细介绍了关于go平滑重启库overseer实现原理,文中的示例代码讲解详细,具有一定的参考价值,有需要的小伙伴可以参考下
    2023-11-11
  • Go语言中的格式化占位符的实现示例

    Go语言中的格式化占位符的实现示例

    在Go语言中,fmt包提供了丰富的格式化占位符用于输出不同类型的数据,了解和选择合适的占位符对于确保输出内容的正确性和可读性至关重要,本文就来介绍一下,感兴趣的可以学习
    2024-10-10

最新评论