0%

Go 解决中文乱码,转换中文字符

终端里面跑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)
}