Windows下在CMD下執(zhí)行Go出現(xiàn)中文亂碼的解決方法
在cmd下運(yùn)行g(shù)o程序或者是GOLAND的Terminal下運(yùn)行g(shù)o程序會(huì)出現(xiàn)中文亂碼的情況。
go run ttypemain.go
???? Ping? [127.0.0.1] ???? 32 ????????:
???? 127.0.0.1 ????: ???=32 ???<1ms TTL=128
???? 127.0.0.1 ????: ???=32 ???<1ms TTL=128
???? 127.0.0.1 ????: ???=32 ???<1ms TTL=128
???? 127.0.0.1 ????: ???=32 ???<1ms TTL=128127.0.0.1 ?? Ping ??????:
??? ?????: ????? = 4??????? = 4????? = 0 (0% ???)??
?????г????????(????????λ):
因?yàn)镚o的編碼是 UTF-8,而CMD的活動(dòng)頁(yè)是cp936(GBK),因此產(chǎn)生亂碼。
在中文Windows系統(tǒng)中,如果一個(gè)文本文件是UTF-8編碼的,那么在CMD.exe命令行窗口(所謂的DOS窗口)中不能正確顯示文件中的內(nèi)容。在默認(rèn)情況下,命令行窗口中使用的代碼頁(yè)是中文或者美國(guó)的,即編碼是中文字符集或者英文字符集。
在CMD或者Terminal下運(yùn)行chcp查看活動(dòng)頁(yè)代碼:
chcp
活動(dòng)代碼頁(yè): 936
得到的結(jié)果是 中文 936,UTF-8的代碼頁(yè)為65001,可以直接使用 chcp 65001 將活動(dòng)代碼頁(yè) 改成65001,這樣UTF-8編碼的就顯示正常了。
chcp 65001
Active code page: 65001
go run ttypemain.go
Pinging [127.0.0.1] with 32 bytes of data:
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128
Ping statistics for 127.0.0.1:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 0ms, Maximum = 0ms, Average = 0ms
?或者將中文轉(zhuǎn)成UTF-8的編碼,完整代碼如下:
package main
import (
"bufio"
"fmt"
"golang.org/x/text/encoding/simplifiedchinese"
"os/exec"
)
type Charset string
const (
UTF8 = Charset("UTF-8")
GB18030 = Charset("GB18030")
)
func main() {
command := "ping"
params := []string{"127.0.0.1","-t"}
cmd := exec.Command(command, params...)
stdout, err := cmd.StdoutPipe()
if err != nil {
fmt.Println(err)
return
}
cmd.Start()
in := bufio.NewScanner(stdout)
for in.Scan() {
cmdRe:=ConvertByte2String(in.Bytes(),"GB18030")
fmt.Println(cmdRe)
}
cmd.Wait()
}
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
}
正在 Ping 127.0.0.1 具有 32 字節(jié)的數(shù)據(jù):
來(lái)自 127.0.0.1 的回復(fù): 字節(jié)=32 時(shí)間<1ms TTL=128
來(lái)自 127.0.0.1 的回復(fù): 字節(jié)=32 時(shí)間<1ms TTL=128
來(lái)自 127.0.0.1 的回復(fù): 字節(jié)=32 時(shí)間<1ms TTL=128
來(lái)自 127.0.0.1 的回復(fù): 字節(jié)=32 時(shí)間<1ms TTL=128
來(lái)自 127.0.0.1 的回復(fù): 字節(jié)=32 時(shí)間<1ms TTL=128
來(lái)自 127.0.0.1 的回復(fù): 字節(jié)=32 時(shí)間<1ms TTL=128
來(lái)自 127.0.0.1 的回復(fù): 字節(jié)=32 時(shí)間<1ms TTL=128
來(lái)自 127.0.0.1 的回復(fù): 字節(jié)=32 時(shí)間<1ms TTL=128
到此這篇關(guān)于Windows下在CMD下執(zhí)行Go出現(xiàn)中文亂碼的解決方法的文章就介紹到這了,更多相關(guān)CMD下執(zhí)行Go亂碼內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
深入string理解Golang是怎樣實(shí)現(xiàn)的
這篇文章主要為大家介紹了深入string理解Golang是怎樣實(shí)現(xiàn)的原理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04
詳解Go開發(fā)Struct轉(zhuǎn)換成map兩種方式比較
本篇文章主要介紹了詳解Go開發(fā)Struct轉(zhuǎn)換成map兩種方式比較,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-07-07
Go net/http/pprof分析內(nèi)存泄露及解決過(guò)程
這篇文章主要介紹了Go net/http/pprof分析內(nèi)存泄露及解決過(guò)程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-04-04
Go語(yǔ)言操作redis數(shù)據(jù)庫(kù)的方法
這篇文章主要介紹了Go語(yǔ)言操作redis數(shù)據(jù)庫(kù)的方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-07-07
使用Go重構(gòu)流式日志網(wǎng)關(guān)的實(shí)戰(zhàn)分享
流式日志網(wǎng)關(guān)的主要功能是提供?HTTP?接口,接收?CDN?邊緣節(jié)點(diǎn)上報(bào)的各類日志(訪問(wèn)日志/報(bào)錯(cuò)日志/計(jì)費(fèi)日志等),將日志作預(yù)處理并分流到多個(gè)的?Kafka?集群和?Topic?中,本文就給大家分享如何使用?Go?重構(gòu)流式日志網(wǎng)關(guān)2023-06-06
在?Golang?中使用?Cobra?創(chuàng)建?CLI?應(yīng)用
這篇文章主要介紹了在?Golang?中使用?Cobra?創(chuàng)建?CLI?應(yīng)用,來(lái)看下?Cobra?的使用,這里我們使用的?go1.13.3?版本,使用?Go?Modules?來(lái)進(jìn)行包管理,需要的朋友可以參考下2022-01-01
golang使用 gomodule 在公共測(cè)試環(huán)境管理go的依賴的實(shí)例詳解
這篇文章主要介紹了golang使用 gomodule 在公共測(cè)試環(huán)境管理go的依賴,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-11-11

