参数是前台传过来的,路径自带引号,考虑到空格问题,不能去 我知道可以不经过cmd调用,但出于个人理由此处不使用 // 这是模拟的参数 cmdLine = `"d:/.../i_view64.exe" "E:/465f55d02d.jpg"` cmd := exec.Command("cmd.exe") cmd.SysProcAttr = &syscall.SysProcAttr{CmdLine: "/c " + cmdLine} var out bytes.Buffer var stderr bytes.Buffer cmd.Stdout = &out cmd.Stderr = &stderr if err := cmd.Run(); err != nil { log.Println(fmt.Sprint(err) + ": " + stderr.String()) } else { log.Println(out.String()) } 输出结果为: `2024/03/19 17:38:41 exit status 1: �ļ�����Ŀ¼�������������ȷ��` > 乱码我已经放弃了,谷歌了很久没有能解决的,大家有好办法欢迎回答。 改为 cmd.SysProcAttr = &syscall.SysProcAttr{CmdLine: "/c echo 123 && " + cmdLine} 很神奇,不报错了,但乱码还是不变的——虽然不知道什么内容 还有一个尝试: cmd.SysProcAttr = &syscall.SysProcAttr{CmdLine: "/c chcp 65001 && " + cmdLine} 修改cmd的编码为utf8,没用! 另外 cmd := exec.Command("cmd.exe", "/c", fmt.Sprintf("chcp 65001 && %s", cmdLine)) 这个也试了,直接报错,图片都没打开。 各位有何高见? 谢谢