最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

CMD下執(zhí)行Go出現(xiàn)中文亂碼的解決方法

 更新時(shí)間:2021年12月08日 11:22:47   作者:ourLang  
需要在Go寫的服務(wù)里面調(diào)用命令行或者批處理,并根據(jù)返回的結(jié)果做處理。但是windows下面用cmd返回中文會出現(xiàn)亂碼,本文就詳細(xì)的介紹一下解決方法,感興趣的可以了解一下

1、報(bào)錯信息如下

在這里插入圖片描述

2、原因分析

因?yàn)镚o的編碼是UTF-8,而CMD的活動頁是cp936(GBK),因此產(chǎn)生亂碼。在中文Windows系統(tǒng)中,如果一個文本文件是UTF-8編碼的,那么在CMD.exe命令行窗口(所謂的DOS窗口)中不能正確顯示文件中的內(nèi)容。在默認(rèn)情況下,命令行窗口中使用的代碼頁是中文或者美國的,即編碼是中文字符集或者英文字符集。

3、解決方法

golang處理中文時(shí)默認(rèn)是utf8,當(dāng)遇到其他如GBK字符是就會出現(xiàn)亂碼,此處介紹golang 官方golang.org/x/text/encoding/simplifiedchinese包下的編碼轉(zhuǎn)換

simplifiedchinese.GB18030.NewDecoder().Bytes()

4、封裝處理亂碼方法

package main

import "golang.org/x/text/encoding/simplifiedchinese"

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:
		decodeBytes, _ := simplifiedchinese.GB18030.NewDecoder().Bytes(byte)
		str = string(decodeBytes)
	case UTF8:
		fallthrough
	default:
		str = string(byte)
	}

	return str
}

5、解決亂碼完整代碼

package main

import (
	"bytes"
	"fmt"
	"golang.org/x/text/encoding/simplifiedchinese"
	"os"
	"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:
		decodeBytes, _ := simplifiedchinese.GB18030.NewDecoder().Bytes(byte)
		str = string(decodeBytes)
	case UTF8:
		fallthrough
	default:
		str = string(byte)
	}

	return str
}

//arg  執(zhí)行的bat文件完整路徑
//返回錯誤信息及消息提示
func ExecCommand(arg string) (error, string) {
	c := exec.Command("cmd", "/C", arg)
	w := bytes.NewBuffer(nil)
	c.Stderr = w
	message := "執(zhí)行" + arg + "文件抽取數(shù)據(jù)成功"
	_, err1 := os.Stat(arg)
	var err error
	//判斷文件是否存在
	if err1 != nil {
		err := c.Run()
		if err != nil {
			fmt.Printf("Run returns: %s\n", err)
		}
		//處理中文亂碼
		garbledStr := ConvertByte2String(w.Bytes(), GB18030)
		message = err1.Error() + garbledStr
		//文件不存在并且執(zhí)行報(bào)錯
		return err, message
	} else {
		err = c.Run()
		if err != nil {
			//處理中文亂碼
			garbledStr := ConvertByte2String(w.Bytes(), GB18030)
			//文件存在 但執(zhí)行bat文件報(bào)錯
			return err, garbledStr
		}
	}
	//文件存在并且執(zhí)行bat文件成功
	return err, message
}

到此這篇關(guān)于CMD下執(zhí)行Go出現(xiàn)中文亂碼的解決方法的文章就介紹到這了,更多相關(guān)CMD執(zhí)行Go中文亂碼內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Go底層channel實(shí)現(xiàn)原理及示例詳解

    Go底層channel實(shí)現(xiàn)原理及示例詳解

    這篇文章主要介紹了Go底層channel實(shí)現(xiàn)原理及示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • golang包循環(huán)引用的幾種解決方案總結(jié)

    golang包循環(huán)引用的幾種解決方案總結(jié)

    golang有包循環(huán)引用問題,用過的應(yīng)該都知道,下面這篇文章主要給大家介紹了關(guān)于golang包循環(huán)引用的幾種解決方案,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-09-09
  • Go 并發(fā)編程Goroutine的實(shí)現(xiàn)示例

    Go 并發(fā)編程Goroutine的實(shí)現(xiàn)示例

    Go語言中的并發(fā)編程主要通過Goroutine和Channel來實(shí)現(xiàn),本文就來介紹一下Go 并發(fā)編程的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-12-12
  • Golang調(diào)用FFmpeg轉(zhuǎn)換視頻流的實(shí)現(xiàn)

    Golang調(diào)用FFmpeg轉(zhuǎn)換視頻流的實(shí)現(xiàn)

    本文主要介紹了Golang調(diào)用FFmpeg轉(zhuǎn)換視頻流,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • GO語言中回調(diào)函數(shù)的使用

    GO語言中回調(diào)函數(shù)的使用

    本文主要介紹了GO語言中回調(diào)函數(shù)的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • go?GCM?gin中間件的加密解密文件流處理

    go?GCM?gin中間件的加密解密文件流處理

    這篇文章主要介紹了go語言?GCM加密解密,gin中間件的加密解密及文件流處理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪<BR>
    2022-05-05
  • Go語言實(shí)現(xiàn)控制臺輸入&生成隨機(jī)數(shù)詳解

    Go語言實(shí)現(xiàn)控制臺輸入&生成隨機(jī)數(shù)詳解

    這篇文章主要介紹了Go語言如何實(shí)現(xiàn)控制臺輸入&生成隨機(jī)數(shù),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • Go?select使用與底層原理講解

    Go?select使用與底層原理講解

    這篇文章主要介紹了Go?select使用與底層原理講解,select是Go提供的IO多路復(fù)用機(jī)制,可以用多個cas同時(shí)監(jiān)聽多個channl的讀寫狀態(tài),相關(guān)內(nèi)容需要的朋友可以參考一下
    2022-07-07
  • Golang實(shí)現(xiàn)讀取excel文件并轉(zhuǎn)換為JSON格式

    Golang實(shí)現(xiàn)讀取excel文件并轉(zhuǎn)換為JSON格式

    本文介紹了如何使用Golang讀取Excel文件并將其轉(zhuǎn)換為JSON格式,通過安裝excelize依賴和創(chuàng)建readExcelToJSON方法,可以實(shí)現(xiàn)這一功能,如果需要轉(zhuǎn)換數(shù)據(jù)類型,可以修改相應(yīng)的代碼,需要的朋友可以參考下
    2025-03-03
  • GO語言原生實(shí)現(xiàn)文件上傳功能

    GO語言原生實(shí)現(xiàn)文件上傳功能

    這篇文章主要為大家詳細(xì)介紹了GO語言原生實(shí)現(xiàn)文件上傳功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-07-07

最新評論

棋牌| 胶南市| 玉溪市| 黑河市| 临清市| 宣汉县| 古蔺县| 辉县市| 五大连池市| 河间市| 科技| 囊谦县| 临猗县| 广西| 淳化县| 佛山市| 临泉县| 大港区| 眉山市| 友谊县| 共和县| 安化县| 大宁县| 南丹县| 海盐县| 安国市| 无棣县| 沁源县| 合川市| 磴口县| 武穴市| 元朗区| 东至县| 文山县| 平舆县| 兴仁县| 长子县| 永春县| 定结县| 介休市| 定南县|