终端里面跑ping命令的时候,终端输出的字符通过go程序再打印出来就乱码了,要做转换处理
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| import ( "bytes" "fmt" "github.com/commander-cli/cmd" "golang.org/x/text/encoding/simplifiedchinese" "log" "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: var decodeBytes, _ = simplifiedchinese.GB18030.NewDecoder().Bytes(byte) str = string(decodeBytes) case UTF8: fallthrough default: str = string(byte) } return str }
func main() { cmd := exec.Command("ping", "www.baidu.com") var outb, errb bytes.Buffer cmd.Stdout = &outb cmd.Stderr = &errb newerr := cmd.Run() if newerr != nil { log.Fatal(newerr) } cmdStdout := ConvertByte2String([]byte(outb.String()), "GB18030") cmdStderr := ConvertByte2String([]byte(errb.String()), "GB18030") fmt.Println("out:", cmdStdout, "err:", cmdStderr) }
|