亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

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

在這里插入圖片描述

2、原因分析

因?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ó)的,即編碼是中文字符集或者英文字符集。

3、解決方法

golang處理中文時(shí)默認(rèn)是utf8,當(dāng)遇到其他如GBK字符是就會(huì)出現(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文件完整路徑
//返回錯(cuò)誤信息及消息提示
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)錯(cuò)
		return err, message
	} else {
		err = c.Run()
		if err != nil {
			//處理中文亂碼
			garbledStr := ConvertByte2String(w.Bytes(), GB18030)
			//文件存在 但執(zhí)行bat文件報(bào)錯(cuò)
			return err, garbledStr
		}
	}
	//文件存在并且執(zhí)行bat文件成功
	return err, message
}

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

相關(guān)文章

  • Go語(yǔ)言Gin框架前后端分離項(xiàng)目開(kāi)發(fā)實(shí)例

    Go語(yǔ)言Gin框架前后端分離項(xiàng)目開(kāi)發(fā)實(shí)例

    本文主要介紹了Go語(yǔ)言Gin框架前后端分離項(xiàng)目開(kāi)發(fā)工程化實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-11-11
  • golang中make和new的區(qū)別示例詳解

    golang中make和new的區(qū)別示例詳解

    Go 語(yǔ)言中的 new 和 make 一直是新手比較容易混淆的東西,咋一看很相似。不過(guò)解釋兩者之間的不同也非常容易,下面這篇文章主要介紹了golang中make和new的區(qū)別,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。
    2017-08-08
  • go語(yǔ)言beego框架分頁(yè)器操作及接口頻率限制示例

    go語(yǔ)言beego框架分頁(yè)器操作及接口頻率限制示例

    這篇文章主要為大家介紹了go語(yǔ)言beego框架分頁(yè)器操作使用示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
    2022-04-04
  • go語(yǔ)言更高精度的Sleep實(shí)例解析

    go語(yǔ)言更高精度的Sleep實(shí)例解析

    這篇文章主要為大家介紹了go語(yǔ)言更高精度的Sleep實(shí)例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • GoLang sync.Pool簡(jiǎn)介與用法

    GoLang sync.Pool簡(jiǎn)介與用法

    這篇文章主要介紹了GoLang sync.Pool簡(jiǎn)介與用法,Pool是可伸縮、并發(fā)安全的臨時(shí)對(duì)象池,用來(lái)存放已經(jīng)分配但暫時(shí)不用的臨時(shí)對(duì)象,通過(guò)對(duì)象重用機(jī)制,緩解GC壓力,提高程序性能
    2023-01-01
  • Go 通過(guò)結(jié)構(gòu)struct實(shí)現(xiàn)接口interface的問(wèn)題

    Go 通過(guò)結(jié)構(gòu)struct實(shí)現(xiàn)接口interface的問(wèn)題

    這篇文章主要介紹了Go 通過(guò)結(jié)構(gòu)struct實(shí)現(xiàn)接口interface的問(wèn)題,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-10-10
  • golang監(jiān)聽(tīng)文件變化的實(shí)例

    golang監(jiān)聽(tīng)文件變化的實(shí)例

    這篇文章主要介紹了golang監(jiān)聽(tīng)文件變化的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-03-03
  • 一文深入探討Go語(yǔ)言中的if-else語(yǔ)句

    一文深入探討Go語(yǔ)言中的if-else語(yǔ)句

    在Go語(yǔ)言中,條件語(yǔ)句的使用方式相對(duì)簡(jiǎn)潔明了,所以本文將探討一下如何在Go程序中有效地進(jìn)行條件判斷和邏輯控制,感興趣的小伙伴可以了解下
    2023-08-08
  • 利用GO語(yǔ)言實(shí)現(xiàn)多人聊天室實(shí)例教程

    利用GO語(yǔ)言實(shí)現(xiàn)多人聊天室實(shí)例教程

    聊天室的實(shí)現(xiàn)大家應(yīng)該都遇到過(guò),這篇文章主要給大家介紹了關(guān)于利用GO語(yǔ)言實(shí)現(xiàn)多人聊天室的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。
    2018-03-03
  • 值得擁有的Go語(yǔ)言常用內(nèi)置包使用示例

    值得擁有的Go語(yǔ)言常用內(nèi)置包使用示例

    本文將介紹?Go?語(yǔ)言的常用內(nèi)置包,詳細(xì)介紹它們的功能、用法,并通過(guò)通俗易懂的示例代碼,讓讀者掌握這些內(nèi)置包的精髓,提高?Go?語(yǔ)言編程技能
    2023-11-11

最新評(píng)論