目录
  • 1、报错信息如下
  • 2、原因分析
  • 3、解决方法
  • 4、封装处理乱码方法
  • 5、解决乱码完整代码

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出现中文乱码问题?

最新文章

  1. Android中如何设置RadioButton在文字的右边,图标在左边
  2. Android复制assets目录下的图片到内存
  3. Command
  4. UVa10562 Undraw the Trees
  5. Swift3.0 更新后出现比较运算符方法
  6. SQL 查询字段为值不为空
  7. Vue.jsbrowserify项目模板
  8. XBOX360 硬盘玩游戏
  9. MT5基础知识
  10. 小星星的php
  11. iOS学习——Quartz2D学习之UIKit绘制
  12. 在webstorm中配置sass的自动编译,并且可以指定编译后的css的目录.
  13. python 调用js代码
  14. 一起学libcef--搭建自己的libcef运行环境(Win32程序,错误C2220解决方案)
  15. WCF、WebAPI、WCFREST、WebService之间的区别【转载】
  16. 微信服务器配置令牌(Token)
  17. React Router基础教程
  18. Qt编写websocketpp客户端
  19. [LeetCode&Python] Problem 700. Search in a Binary Search Tree
  20. Spring.NET学习笔记7——依赖对象的注入(基础篇) Level 200

热门文章

  1. nohup原理
  2. kubernetes 集群部署问题点统计
  3. boss直聘上看信息 但是不会显示已读
  4. 思科数据中心CCIE稳定PASS
  5. vmware15 nat模式下虚拟机能够ping通宿主机,宿主机无法平通虚拟机,nat网卡地址为192.168.0.1,网关为192.168.0.2.
  6. db2 linux创建用户后,登录报错
  7. 剑指 Offer II 树
  8. 001 jmete文件目录介绍及汉化
  9. go - 泛型
  10. Linux Shell开发功能点