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控制台,都输出乱码
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")
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
2021-10-09 Mysql查询某个表是否存在于某个数据库中