经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » Go语言 » 查看文章
CMD下执行Go出现中文乱码的解决方法
来源:jb51  时间:2021/12/8 12:44:02  对本文有异议

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包下的编码转换

  1. simplifiedchinese.GB18030.NewDecoder().Bytes()

4、封装处理乱码方法

  1. package main
  2.  
  3. import "golang.org/x/text/encoding/simplifiedchinese"
  4.  
  5. type Charset string
  6.  
  7. const (
  8. UTF8 = Charset("UTF-8")
  9. GB18030 = Charset("GB18030")
  10. )
  11.  
  12. func ConvertByte2String(byte []byte, charset Charset) string {
  13.  
  14. var str string
  15. switch charset {
  16. case GB18030:
  17. decodeBytes, _ := simplifiedchinese.GB18030.NewDecoder().Bytes(byte)
  18. str = string(decodeBytes)
  19. case UTF8:
  20. fallthrough
  21. default:
  22. str = string(byte)
  23. }
  24.  
  25. return str
  26. }

5、解决乱码完整代码

  1. package main
  2.  
  3. import (
  4. "bytes"
  5. "fmt"
  6. "golang.org/x/text/encoding/simplifiedchinese"
  7. "os"
  8. "os/exec"
  9. )
  10.  
  11. type Charset string
  12.  
  13. const (
  14. UTF8 = Charset("UTF-8")
  15. GB18030 = Charset("GB18030")
  16. )
  17.  
  18. func ConvertByte2String(byte []byte, charset Charset) string {
  19.  
  20. var str string
  21. switch charset {
  22. case GB18030:
  23. decodeBytes, _ := simplifiedchinese.GB18030.NewDecoder().Bytes(byte)
  24. str = string(decodeBytes)
  25. case UTF8:
  26. fallthrough
  27. default:
  28. str = string(byte)
  29. }
  30.  
  31. return str
  32. }
  33.  
  34. //arg 执行的bat文件完整路径
  35. //返回错误信息及消息提示
  36. func ExecCommand(arg string) (error, string) {
  37. c := exec.Command("cmd", "/C", arg)
  38. w := bytes.NewBuffer(nil)
  39. c.Stderr = w
  40. message := "执行" + arg + "文件抽取数据成功"
  41. _, err1 := os.Stat(arg)
  42. var err error
  43. //判断文件是否存在
  44. if err1 != nil {
  45. err := c.Run()
  46. if err != nil {
  47. fmt.Printf("Run returns: %s\n", err)
  48. }
  49. //处理中文乱码
  50. garbledStr := ConvertByte2String(w.Bytes(), GB18030)
  51. message = err1.Error() + garbledStr
  52. //文件不存在并且执行报错
  53. return err, message
  54. } else {
  55. err = c.Run()
  56. if err != nil {
  57. //处理中文乱码
  58. garbledStr := ConvertByte2String(w.Bytes(), GB18030)
  59. //文件存在 但执行bat文件报错
  60. return err, garbledStr
  61. }
  62. }
  63. //文件存在并且执行bat文件成功
  64. return err, message
  65. }

到此这篇关于CMD下执行Go出现中文乱码的解决方法的文章就介绍到这了,更多相关CMD执行Go中文乱码内容请搜索w3xue以前的文章或继续浏览下面的相关文章希望大家以后多多支持w3xue!

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号