go控制台输出乱码-go执行命令输出乱码-编码bytes为gbk字符串

go控制台输出乱码 | go执行命令输出乱码 | 编码bytes为gbk字符串

1、问题描述

使用go运行ping命令时,输出乱码,现象如下

代码

package main

import (
   "fmt"
   "os/exec"
)

func ping(ip string) {
   cmd := exec.Command("ping", ip)
   out, err := cmd.CombinedOutput()
   if err != nil {
      fmt.Printf("ping %s 失败, err:%s\n", ip, err)
      return
   }
   output := string(out)
   fmt.Printf("ping %s 成功, 返回信息:%s\n", ip, output)
}
func main() {
   ping("172.16.90.19")
}

现象:无论是cmd控制台,还是goland控制台,都输出乱码

image-20221009102116158

2、原因

谷歌后,大概原因是go默认只支持utf-8编码,而控制台是gbk,所以,当想使用gbk的控制台显示utf-8编码的字符时,就无法显示了。

3、解决

知道了原因,则使用gbk编码bytes就行

"golang.org/x/text/encoding/simplifiedchinese"

output, err := simplifiedchinese.GBK.NewDecoder().Bytes(out)

代码

package main

import (
   "fmt"
   "golang.org/x/text/encoding/simplifiedchinese"
   "os/exec"
)

func ping(ip string) {
   cmd := exec.Command("ping", ip)
   out, err := cmd.CombinedOutput()
   if err != nil {
      fmt.Printf("ping %s 失败, err:%s\n", ip, err)
      return
   }
   output, err := simplifiedchinese.GBK.NewDecoder().Bytes(out)
   if err != nil {
      fmt.Printf("编码 %+v 失败, err:%s\n", out, err)
      return
   }
   fmt.Printf("ping %s 成功, 返回信息:%s\n", ip, output)
}
func main() {
   ping("172.16.90.19")
}

image-20221009102754514

参考:https://blog.csdn.net/rznice/article/details/88122923

posted @   南风丶轻语  阅读(1403)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
历史上的今天:
2021-10-09 Mysql查询某个表是否存在于某个数据库中
点击右上角即可分享
微信分享提示